Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
38019 LYLAKIOIAKIOI 【S】T4 C++ 通过 100 743 MS 1900 KB 3200 2025-06-08 19:59:28

Tests(20/20):


#include<bits/stdc++.h> #define ll long long #define maxn 205 #define mod 998244353 using namespace std; //0,1,2,3: 0:0,1:0,0:1,1:1 int dp[2][4*maxn][4][4][4][4]; //��ǰ�ߵ����ˣ���ǰ�÷ֲ��Ƕ��٣���ǰ0,1,2,3�ֱ��ߵ�������ķ����� int to[4][2]; //0,1,2,3����a,b�ֱ���ȥ��״̬ int delta[4][2]; //0,1,2,3����a,b��û�ж���÷� int n; string s; void add(int &x,int y) {x=(x+y)%mod; return;} void init() { to[0][0]=1; to[0][1]=2; //0:0 to[1][0]=0; delta[1][0]=1; //1:0����a to[1][1]=3; //1:0����b to[2][0]=3; //0:1����a to[2][1]=0; delta[2][1]=-1; //0:1����b to[3][0]=0; to[3][1]=0; delta[3][0]=1; delta[3][1]=-1; //1:1����a,b����0:0���÷ֲ�һ������ return; } int TO[5],vis[5]; int check(int sta,int a,int b,int c,int d) { int num=0; TO[0]=a,TO[1]=b,TO[2]=c,TO[3]=d; vis[0]=vis[1]=vis[2]=vis[3]=0; //����0:0��12�������sta�ϵĵ㶼�߹����ڵ���2�Σ���sta��ĵ����1�Σ���Ϸ� int now=0; for (int i=1;i<=12;i++) { vis[now]++; now=TO[now]; } if (sta&1) {if (vis[0]<=1) return 0;} else {if (vis[0]>1) return 0;} if (sta&2) {if (vis[1]<=1) return 0;} else {if (vis[1]>1) return 0;} if (sta&4) {if (vis[2]<=1) return 0;} else {if (vis[2]>1) return 0;} if (sta&8) {if (vis[3]<=1) return 0;} else {if (vis[3]>1) return 0;} return 1; } int main() { int A=0,B=0,T=0; init(); cin>>s; n=s.size(); for (int sta=1;sta<16;sta++) //��Щ�����û��У��Ʒֵ�ʱ��ֻ����������еĵ� { int now=0,nxt=1; memset(dp,0,sizeof(dp)); dp[now][2*n+2][0][1][2][3]=1; for (int i=0;i<n;i++) { for (int fen=2;fen<=4*n+2;fen++) for (int a=0;a<=3;a++) for (int b=0;b<=3;b++) for (int c=0;c<=3;c++) for (int d=0;d<=3;d++) if (dp[now][fen][a][b][c][d]) //�������ʡ���ٳ��� { for (int tt=0;tt<=1;tt++) { if (s[i]=='b' && tt==0) continue; if (s[i]=='a' && tt==1) continue; int na=to[a][tt],nb=to[b][tt],nc=to[c][tt],nd=to[d][tt],nfen=fen; if (sta&1) nfen+=delta[a][tt]; if (sta&2) nfen+=delta[b][tt]; if (sta&4) nfen+=delta[c][tt]; if (sta&8) nfen+=delta[d][tt]; add(dp[nxt][nfen][na][nb][nc][nd],dp[now][fen][a][b][c][d]); } } swap(now,nxt); memset(dp[nxt],0,sizeof(dp[nxt])); } for (int fen=2;fen<=4*n+2;fen++) for (int a=0;a<=3;a++) for (int b=0;b<=3;b++) for (int c=0;c<=3;c++) for (int d=0;d<=3;d++) if (dp[now][fen][a][b][c][d]) { //��check a,b,c,d�Ƿ�պù�����һ�������û�����sta���е㶼�ڻ��� if (check(sta,a,b,c,d)==0) continue; // cout<<sta<<" "<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<dp[now][fen][a][b][c][d]<<endl; if (fen>2*n+2) add(A,dp[now][fen][a][b][c][d]); if (fen<2*n+2) add(B,dp[now][fen][a][b][c][d]); if (fen==2*n+2) add(T,dp[now][fen][a][b][c][d]); } } cout<<A<<endl<<T<<endl<<B<<endl; }


测评信息: