Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
35194 swzzzz 【S】T2 C++ 通过 100 42 MS 62876 KB 1134 2024-11-28 16:26:54

Tests(12/12):


#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; }


测评信息: