Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35142 | baka24 | 【S】T2 | C++ | 解答错误 | 26 | 49 MS | 133700 KB | 1203 | 2024-11-28 12:59:55 |
#include<bits/stdc++.h> using namespace std; #define int long long int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} const int MAXN=4010,N=20,Mod=998244353; int Pow(int x,int y){int rt=1;while(y){if(y&1)rt=rt*x%Mod;x=x*x%Mod,y>>=1;}return rt;} int n,k,ans,f[MAXN][MAXN],g[MAXN][MAXN]; char c[MAXN]; void add(int &x,int y){x+=y;if(x>=Mod)x-=Mod;} void slv(){ n=read(); scanf("%s",c+1); g[0][0]=f[0][0]=1; for(int j=1;j<=n;j++)g[0][j]+=g[0][j-1]; for(int i=1;i<=n;i++){ for(int j=1;j<=i;j++){ if(c[i]=='0'){ add(f[i][j],f[i-1][j-1]*(j-1)%Mod); add(f[i][j],g[i-1][j-1]); } else add(f[i][j],f[i-1][j]*(i-j)%Mod); // cout<<f[i][j]<<" "; } // cout<<endl; g[i][0]=f[i][0]; for(int j=1;j<=n;j++)add(g[i][j],(g[i][j-1]+f[i][j])%Mod); } for(int i=1;i<=n;i++)add(ans,f[n][i]); printf("%lld",ans); } signed main(){ // jc[0]=ny[0]=1;for(int i=1;i<=MAXN-5;i++)jc[i]=jc[i-1]*i%Mod,ny[i]=Pow(jc[i],Mod-2); slv(); return 0; }