提出 #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
結果
AC × 4
AC × 76
セット名 テストケース
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