Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
33735 LYLAKIOIAKIOI 【S】T3 C++ 通过 100 36 MS 268 KB 1698 2024-10-20 16:40:23

Tests(10/10):


#include<bits/stdc++.h> #define ll long long using namespace std; const int N=550,mod=998244353; int f[N][2]; int n,a[N]; void plu(int &a,int b){ a+=b;if(a>=mod) a-=mod; }int cnt[N]; int g[N][N]; /*void slv1(){ int ans=0; for(int i=0;i<=n;i++){ memset(f,0,sizeof(f)); f[i]=1; for(int j=i+1;j<=n;j++){ for(int k=j-1;k>=i;k--){ if((j-k-1)>i) break; plu(f[j],f[k]); } }plu(ans,f[n]); }cout<<ans; }*/void slv2(){ int ans=0; sort(a+1,a+n+1);for(int i=1;i<=n;i++) cnt[a[i]]=1; for(int i=1;i<=a[n]+1;i++) cnt[i]+=cnt[i-1]; for(int i=0;i<=a[n];i++){ //if(i!=0) if(cnt[i]-cnt[i-1]==0) continue; memset(f,0,sizeof(f)); int s=0; for(int j=1;j<=n;j++) if(a[j]<=i) s=a[j]; if(s==i) f[s][1]=1; else f[s][0]=1; for(int j=s+1;j<=a[n];j++){ if(cnt[j]-cnt[j-1]==0){ plu(f[j][0],f[j-1][0]); plu(f[j][1],f[j-1][1]); }else{ for(int k=j-1;k>=max(s,i);k--){ if((j-k-1)>i) break; plu(f[j][1],f[k][1]); if((j-k-1)<i) plu(f[j][0],f[k][0]); else plu(f[j][1],f[k][0]); //if(cnt[j]-cnt[k]==0) break; } }//cout<<i<<' '<<j<<' '<<f[j][0]<<endl; }plu(ans,f[a[n]][1]); //cout<<ans<<endl; }cout<<ans; } int main(){ cin>>n;for(int i=1;i<=n;i++) cin>>a[i]; int fl=1; //for(int i=1;i<=n;i++) if(a[i]!=i) fl=0; //if(fl) slv1(); //else slv2(); return 0; }


测评信息: