Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
33701 | A21μΘ_wjy | 【S】T1 | C++ | 通过 | 100 | 44 MS | 66640 KB | 1285 | 2024-10-20 13:57:47 |
#include<bits/stdc++.h> #define int long long using namespace std; const int maxn=1e6+7; const int mod=998244353; //g++ *.cpp -o2 -std=c++14 -static -o * //./* string s; int n; bool b[maxn]; int dp[maxn][2][2]; signed main(){ cin>>s;n=s.length(); for(int i=1;i<=n;i++)b[i]=s[i-1]-'0'; dp[0][1][1]=1; for(int i=1;i<=n;i++){ // i-1,0,0 dp[i][0][0]=(dp[i][0][0]+dp[i-1][0][0]*3%mod)%mod; // i-1,0,1 if(b[i]){ dp[i][0][0]=(dp[i][0][0]+dp[i-1][0][1]*2%mod)%mod; dp[i][0][1]=(dp[i][0][1]+dp[i-1][0][1])%mod; } else dp[i][0][1]=(dp[i][0][1]+dp[i-1][0][1]*2)%mod; // i-1,1,0 if(b[i]){ dp[i][0][0]=(dp[i][0][0]+dp[i-1][1][0]*2%mod)%mod; dp[i][1][0]=(dp[i][1][0]+dp[i-1][1][0])%mod; } else dp[i][1][0]=(dp[i][1][0]+dp[i-1][1][0]*2)%mod; // i-1,1,1 if(b[i]){ dp[i][0][0]=(dp[i][0][0]+dp[i-1][1][1])%mod; dp[i][1][0]=(dp[i][1][0]+dp[i-1][1][1])%mod; dp[i][0][1]=(dp[i][0][1]+dp[i-1][1][1])%mod; } else dp[i][1][1]=(dp[i][1][1]+dp[i-1][1][1])%mod; } cout<<((dp[n][0][0]+dp[n][0][1]+dp[n][1][0]+dp[n][1][1])%mod)<<endl; return 0; }