社区讨论
WA on #4,求条,玄关
P14846[ICPC 2022 Yokohama R] Incredibly Cute Penguin Chicks参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mjsp5zw4
- 此快照首次捕获于
- 2025/12/30 22:43 2 个月前
- 此快照最后确认于
- 2026/01/02 20:35 2 个月前
先睡了。明天来看。
CPP#include<bits/stdc++.h>
using namespace std;
#define debug(i) cout<<"Cute_MKS "<<i<<' '
#define pii pair<int,int>
#define mkp(a,b) make_pair(a,b)
const int N=2e6+10,mod=998244353;
int n,q[N][3],dic[3],dp[N];
string s;
unordered_map<int,int>umap[N][3];
inline void upt(int op,int a,int b,int v)
{
for(;b<=2*n+2;b+=b&-b)
{
if(umap[a][op].find(b)==umap[a][op].end()) umap[a][op][b]=v;
else umap[a][op][b]=(umap[a][op][b]+v)%mod;
}
}
inline int que(int op,int a,int b)
{
int sum=0;
for(;b;b-=b&-b) if(umap[a][op].find(b)!=umap[a][op].end()) sum=(sum+umap[a][op][b])%mod;
return sum;
}
inline void sol1(int p,int C)
{
int A=(C+1)%3;int B=(A+1)%3;
int a=q[p][A]-q[p][B]+n+1;
int b=q[p][C]-q[p][A]+n;
dp[p]=(dp[p]+que(C,a,b))%mod;
}
inline void sol2(int p,int C)
{
int A=(C+1)%3;int B=(A+1)%3;
int a=q[p][A]-q[p][B]+n+1;
int b=q[p][C]-q[p][A]+n+1;
upt(C,a,b,dp[p]);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>s;n=s.length();s=' '+s;
dic[(int)'I']=0;dic[(int)'C']=1;dic[(int)'P']=2;
for(int i=1;i<=n;i++)
{
q[i][0]=q[i-1][0],q[i][1]=q[i-1][1],q[i][2]=q[i-1][2];
q[i][dic[s[i]]]++;
}
dp[0]=1;
for(int i=0;i<3;i++) sol2(0,i);
for(int i=1;i<=n;i++)
{
for(int j=0;j<3;j++) sol1(i,j);
for(int j=0;j<3;j++) sol2(i,j);
//debug(i)<<dp[i]<<endl;
}
cout<<dp[n];
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...