Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
38017 | LYLAKIOIAKIOI | 【S】T4 | C++ | 通过 | 100 | 510 MS | 36556 KB | 5049 | 2025-06-08 19:56:39 |
#include<bits/stdc++.h> #define pii pair<int,int> #define fi first #define se second #define mk make_pair using namespace std; const int N=220; int f[N][N*3][4][4][4]; string s;int n; const int C=320,mod=998244353; void Add(int &a,int b){a+=b;if(a>=mod) a-=mod;} void Sub(int &a,int b){a-=b;if(a<0) a+=mod;} void Mul(int &a,int b){a=1ll*a*b%mod;} int tr(int a,int b){return a+b;} int tr(pii a){return a.fi+a.se;} pii tr(int a){return mk(a/2,(a+1)/2);} void upd(int &a,int &b,int &c,bool fl){ if(a>=2||b-a>=2){ if(fl){ if(a>=2) c++; else c--; }a=0;b=0; } } int main(){ cin>>s;n=s.length(); s=' '+s; if(n==1){ if(s[1]=='a') cout<<"1\n0\n0\n"; if(s[1]=='b') cout<<"0\n0\n1\n"; if(s[1]=='?') cout<<"1\n0\n1\n"; return 0; } int LM=n*1.5+10; int a1=0,a2=0,a3=0; for(int o1=0;o1<=1;o1++){ if(o1+'a'!=s[n-1]&&s[n-1]!='?') continue; for(int o2=0;o2<=1;o2++){ if(o2+'a'!=s[n]&&s[n]!='?') continue; for(int S=0;S<8;S++){ memset(f,0,sizeof(f)); int s1=0,s2=(o2==0),s3=(o2==0)+(o1==0); int c1=0,c2=1,c3=2; int w=0;upd(s3,c3,w,S&4); f[0][C+w][s1+c1][s2+c2][s3+c3]=1; for(int i=1;i<=n-2;i++){ for(int j=-LM;j<=LM;j++){ for(int a=0;a<=3;a++) for(int b=0;b<=3;b++) for(int c=0;c<=3;c++) { if(!f[i-1][j+C][a][b][c]) continue; int cnt=j; pii pa=tr(a),pb=tr(b),pc=tr(c); if(s[i]!='b'){ pa.fi++,pa.se++; pb.fi++,pb.se++; pc.fi++,pc.se++; upd(pa.fi,pa.se,cnt,S&1); upd(pb.fi,pb.se,cnt,S&2); upd(pc.fi,pc.se,cnt,S&4); Add(f[i][cnt+C][tr(pa)][tr(pb)][tr(pc)],f[i-1][j+C][a][b][c]); } pa=tr(a),pb=tr(b),pc=tr(c),cnt=j; if(s[i]!='a'){ pa.se++; pb.se++; pc.se++; upd(pa.fi,pa.se,cnt,S&1); upd(pb.fi,pb.se,cnt,S&2); upd(pc.fi,pc.se,cnt,S&4); Add(f[i][cnt+C][tr(pa)][tr(pb)][tr(pc)],f[i-1][j+C][a][b][c]); } } } } for(int i=-LM;i<=LM;i++){ for(int a=0;a<=3;a++) for(int b=0;b<=3;b++) for(int c=0;c<=3;c++) { //if(f[n-2][i+C][a][b][c]) cout<<i<<' '<<S<<' '<<a<<' '<<b<<' '<<c<<endl; int cnt=i; pii pa=tr(a),pb=tr(b),pc=tr(c); pa.se++;pb.se++;pc.se++; pa.fi+=(o1==0),pb.fi+=(o1==0),pc.fi+=(o1==0); upd(pa.fi,pa.se,cnt,S&1); upd(pb.fi,pb.se,cnt,S&2); upd(pc.fi,pc.se,cnt,S&4); pa.se++;pb.se++;pc.se++; pa.fi+=(o2==0),pb.fi+=(o2==0),pc.fi+=(o2==0); upd(pa.fi,pa.se,cnt,S&1); upd(pb.fi,pb.se,cnt,S&2); upd(pc.fi,pc.se,cnt,S&4); int ta=pa.se,tb=pb.se,tc=pc.se; bool flg=0; if(ta==0&&S==1) flg=1; if(ta==1&&tb==1&&S==2) flg=1; if(ta==2&&tc==2&&S==4) flg=1; if(ta==1&&tb==0&&S==3) flg=1; if(ta==2&&tc==0&&S==5) flg=1; if(ta==1&&tb==2&&tc==2&&S==4) flg=1; if(ta==1&&tb==2&&tc==1&&S==6) flg=1; if(ta==1&&tb==2&&tc==0&&S==7) flg=1; if(ta==2&&tc==1&&tb==1&&S==2) flg=1; if(ta==2&&tc==1&&tb==2&&S==6) flg=1; if(ta==2&&tc==1&&tb==0&&S==7) flg=1; if(flg){ //if(f[n-2][i+C][a][b][c]) cout<<i<<' '<<S<<' '<<cnt<<' '<<S<<' '<<a<<' '<<b<<' '<<c<<endl; if(cnt>0) Add(a1,f[n-2][i+C][a][b][c]); if(cnt==0) Add(a2,f[n-2][i+C][a][b][c]); if(cnt<0) Add(a3,f[n-2][i+C][a][b][c]); } } } } } }cout<<a1<<endl<<a2<<endl<<a3<<endl; return 0; }