社区讨论

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 条回复,欢迎继续交流。

正在加载回复...