提出 #65361454
ソースコード 拡げる
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
const int N=405,H=998244353;
int n,h[N],sz[N],f[N][N][2],c[N][N][2],idx=0,len[N],ans;
vector<int> G[N];
int adc(int a,int b){return a+b>=H?a+b-H:a+b;}
int dec(int a,int b){return a<b?a-b+H:a-b;}
int mul(int a,int b){return 1ll*a*b%H;}
void add(int &a,int b){a=adc(a,b);}
void del(int &a,int b){a=dec(a,b);}
int qpow(int a,int b=H-2){
int res=1;
while(b){if(b&1) res=mul(res,a);a=mul(a,a),b>>=1;}
return res;
}
void init(){
for(int i=0,bas=1;i<=n;i++,bas=mul(bas,2)){
c[i][0][0]=c[i][0][1]=1;
for(int j=1;j<=n;j++) for(int k:{0,1}) c[i][j][k]=mul(c[i][j-1][k],bas-(!k));
}
}
int build(int l,int r,int pre){
int mn=n+1,u=++idx,lst=l;
for(int i=l;i<=r;i++) mn=min(mn,h[i]);
len[u]=mn-pre;
for(int i=l;i<=r;i++){
if(h[i]==mn){
G[u].pb(0);
if(lst<i) G[u].pb(build(lst,i-1,mn));
lst=i+1;
}
}
if(lst<=r) G[u].pb(build(lst,r,mn));
return u;
}
void dfs(int u){
if(!u) return ;
f[u][0][1]=1;
for(int v:G[u]){
dfs(v),sz[u]+=sz[v];
for(int j=sz[u];j>=0;j--){
array<int,2> t={0,0};
for(int i=0;i<=min(sz[v],j);i++)
for(int k1:{0,1}) for(int k2:{0,1})
add(t[k1&k2],mul(f[v][i][k1],f[u][j-i][k2]));
for(int k:{0,1}) f[u][j][k]=t[k];
}
}
for(int i=0;i<=sz[u];i++) for(int k:{0,1})
f[u][i][k]=mul(f[u][i][k],c[sz[u]-i][len[u]][k]);
}
int main(){
/*2025.4.30 H_W_Y AT_agc041_f [AGC041F] Histogram Rooks 容斥 + dp*/
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++) cin>>h[i];
init(),build(1,n,0);
sz[0]=1,f[0][1][1]=H-1,f[0][1][0]=f[0][0][1]=1;
dfs(1);
for(int i=0;i<=n;i++) for(int k:{0,1}) add(ans,f[1][i][k]);
cout<<ans;
return 0;
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | F - Histogram Rooks |
| ユーザ | H_W_Y |
| 言語 | C++ 20 (gcc 12.2) |
| 得点 | 2000 |
| コード長 | 1784 Byte |
| 結果 | AC |
| 実行時間 | 90 ms |
| メモリ | 6172 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 2000 / 2000 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | 00-sample-01.txt, 00-sample-02.txt, 00-sample-03.txt, 00-sample-04.txt |
| All | 00-sample-01.txt, 00-sample-02.txt, 00-sample-03.txt, 00-sample-04.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, 01-31.txt, 01-32.txt, 01-33.txt, 01-34.txt, 01-35.txt, 01-36.txt, 01-37.txt, 01-38.txt, 01-39.txt, 01-40.txt, 01-41.txt, 01-42.txt, 01-43.txt, 01-44.txt, 01-45.txt, 01-46.txt, 01-47.txt, 01-48.txt, 01-49.txt, 01-50.txt, 01-51.txt, 01-52.txt, 01-53.txt, 01-54.txt, 01-55.txt, 01-56.txt, 01-57.txt, 01-58.txt, 01-59.txt, 01-60.txt, 01-61.txt, 01-62.txt, 01-63.txt, 01-64.txt, 01-65.txt, 01-66.txt, 01-67.txt, 01-68.txt, 01-69.txt, 01-70.txt, 01-71.txt, 01-72.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00-sample-01.txt | AC | 5 ms | 3628 KiB |
| 00-sample-02.txt | AC | 1 ms | 3508 KiB |
| 00-sample-03.txt | AC | 1 ms | 3500 KiB |
| 00-sample-04.txt | AC | 1 ms | 3504 KiB |
| 01-01.txt | AC | 1 ms | 3420 KiB |
| 01-02.txt | AC | 1 ms | 3620 KiB |
| 01-03.txt | AC | 1 ms | 3624 KiB |
| 01-04.txt | AC | 1 ms | 3496 KiB |
| 01-05.txt | AC | 4 ms | 4728 KiB |
| 01-06.txt | AC | 4 ms | 4824 KiB |
| 01-07.txt | AC | 4 ms | 5604 KiB |
| 01-08.txt | AC | 3 ms | 4988 KiB |
| 01-09.txt | AC | 2 ms | 4860 KiB |
| 01-10.txt | AC | 3 ms | 5348 KiB |
| 01-11.txt | AC | 3 ms | 5200 KiB |
| 01-12.txt | AC | 4 ms | 5936 KiB |
| 01-13.txt | AC | 1 ms | 3988 KiB |
| 01-14.txt | AC | 2 ms | 4264 KiB |
| 01-15.txt | AC | 4 ms | 5768 KiB |
| 01-16.txt | AC | 3 ms | 5560 KiB |
| 01-17.txt | AC | 1 ms | 3480 KiB |
| 01-18.txt | AC | 2 ms | 4244 KiB |
| 01-19.txt | AC | 2 ms | 3844 KiB |
| 01-20.txt | AC | 4 ms | 6156 KiB |
| 01-21.txt | AC | 5 ms | 6028 KiB |
| 01-22.txt | AC | 5 ms | 5900 KiB |
| 01-23.txt | AC | 5 ms | 6028 KiB |
| 01-24.txt | AC | 5 ms | 5968 KiB |
| 01-25.txt | AC | 5 ms | 5412 KiB |
| 01-26.txt | AC | 89 ms | 6104 KiB |
| 01-27.txt | AC | 26 ms | 6028 KiB |
| 01-28.txt | AC | 90 ms | 6080 KiB |
| 01-29.txt | AC | 90 ms | 6108 KiB |
| 01-30.txt | AC | 58 ms | 5592 KiB |
| 01-31.txt | AC | 24 ms | 5836 KiB |
| 01-32.txt | AC | 58 ms | 5548 KiB |
| 01-33.txt | AC | 57 ms | 5592 KiB |
| 01-34.txt | AC | 4 ms | 5072 KiB |
| 01-35.txt | AC | 4 ms | 5184 KiB |
| 01-36.txt | AC | 4 ms | 5460 KiB |
| 01-37.txt | AC | 4 ms | 5668 KiB |
| 01-38.txt | AC | 4 ms | 5880 KiB |
| 01-39.txt | AC | 4 ms | 6000 KiB |
| 01-40.txt | AC | 4 ms | 5916 KiB |
| 01-41.txt | AC | 4 ms | 5928 KiB |
| 01-42.txt | AC | 4 ms | 5920 KiB |
| 01-43.txt | AC | 4 ms | 5880 KiB |
| 01-44.txt | AC | 5 ms | 5772 KiB |
| 01-45.txt | AC | 5 ms | 5920 KiB |
| 01-46.txt | AC | 4 ms | 5904 KiB |
| 01-47.txt | AC | 5 ms | 5948 KiB |
| 01-48.txt | AC | 5 ms | 5956 KiB |
| 01-49.txt | AC | 5 ms | 5968 KiB |
| 01-50.txt | AC | 5 ms | 5972 KiB |
| 01-51.txt | AC | 5 ms | 6024 KiB |
| 01-52.txt | AC | 6 ms | 5972 KiB |
| 01-53.txt | AC | 4 ms | 5840 KiB |
| 01-54.txt | AC | 4 ms | 5980 KiB |
| 01-55.txt | AC | 4 ms | 4892 KiB |
| 01-56.txt | AC | 61 ms | 6084 KiB |
| 01-57.txt | AC | 47 ms | 6076 KiB |
| 01-58.txt | AC | 32 ms | 6004 KiB |
| 01-59.txt | AC | 32 ms | 6060 KiB |
| 01-60.txt | AC | 32 ms | 5992 KiB |
| 01-61.txt | AC | 21 ms | 5988 KiB |
| 01-62.txt | AC | 13 ms | 6040 KiB |
| 01-63.txt | AC | 12 ms | 5944 KiB |
| 01-64.txt | AC | 8 ms | 6040 KiB |
| 01-65.txt | AC | 8 ms | 6172 KiB |
| 01-66.txt | AC | 6 ms | 6044 KiB |
| 01-67.txt | AC | 7 ms | 6044 KiB |
| 01-68.txt | AC | 7 ms | 6108 KiB |
| 01-69.txt | AC | 26 ms | 6052 KiB |
| 01-70.txt | AC | 25 ms | 5996 KiB |
| 01-71.txt | AC | 4 ms | 5680 KiB |
| 01-72.txt | AC | 4 ms | 6044 KiB |