Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35194 | swzzzz | 【S】T2 | C++ | 通过 | 100 | 42 MS | 62876 KB | 1134 | 2024-11-28 16:26:54 |
#include<bits/stdc++.h> using namespace std; #define N 2003 #define mod 998244353 int n; bool s[N]; long long dp[N][N]; int cnt; int main(){ ios::sync_with_stdio(0); cin>>n; char ch; for(int i=1;i<=n;i++){ cin>>ch; s[i]=(ch=='1'); cnt+=(s[i]==0); } for(int i=0;i<=n;i++) dp[0][i]=1; for(int i=1;i<=n;i++){ if(i==1 && s[1]==1){ for(int j=0;j<=n;j++) dp[1][j]=1; continue; } for(int j=0;j<=n;j++){ if(s[i]){ if(j>0) (dp[i][j]+=(dp[i-1][j]-dp[i-1][j-1])*(i-j))%=mod; else (dp[i][j]+=dp[i-1][j]*(i-j))%=mod; }else{ if(j>1) (dp[i][j]+=(dp[i-1][j-1]-dp[i-1][j-2])*(j-1))%=mod; else if(j>0) (dp[i][j]+=dp[i-1][j-1]*(j-1))%=mod; (dp[i][j]+=dp[i-1][j-1])%=mod; } } for(int j=1;j<=n;j++) (dp[i][j]+=dp[i][j-1])%=mod; } long long ans=dp[n][n]-dp[n][cnt-1]; if(cnt==0) ans=dp[n][n]; while (ans<0) ans+=mod; ans%=mod; cout<<ans<<endl; return 0; }