基本全 WA 求助
查看原帖
基本全 WA 求助
749714
xyzfrozen楼主2023/10/1 11:04

样例全过,只对了第一个点求助

#include<bits/stdc++.h>
#define int long long
#define pt putchar(' ')
#define nl puts("")
#define pi pair<int,int>
#define pb push_back
#define go(it) for(auto &it:as[x])
using namespace std;

const int N=1e6+10;
int n,p,ans,rev,ver;
int a[N];
bool col[N];
char c;

int fr(){
    int x=0,flag=1;
    char ch=getchar();
    while(ch<'0' || ch>'9'){
        if(ch=='-') flag=-1;
        ch=getchar();
    }
    while(ch>='0' && ch<='9'){
        x=x*10+(ch-'0');
        ch=getchar();
    }
    return x*flag;
}
void fw(int x){
	if(x<0) putchar('-'),x=-x;
    if(x>9) fw(x/10);
    putchar(x%10+'0');
}
int max(int a,int b){return a>b?a:b;}
int min(int a,int b){return a<b?a:b;}

int qkm(int a,int k)
{
	int ans=0,base=a;
	while(k)
	{
		if(k&1) (ans+=base)%=p;
		(base+=base)%=p;
		k>>=1;
	}
	return ans;
}

signed main()
{
	n=fr(),p=fr();
	for(int i=1;i<=n;i++) a[i]=fr()%p;
	for(int i=1;i<=n;i++)
	{
		cin>>c;
		col[i]=(c=='G');
	}
	
	//rev 序列是否翻转 ver 颜色是否翻转
	//P 0 G 1
	int cnt=0,l=1,r=n;
	while(l<r)
	{
		cnt++;
		if(rev)
		{
			(ans+=a[r])%=p;
			int c1=col[r]^ver,c2=col[r-1]^ver;
			if(c1==c2) a[r-1]=qkm(a[r-1],a[r]);
			else if(!c1 && c2 && cnt&1) ver^=1;
			else rev^=1,ver^=1;
			r--;
		}
		else
		{
			(ans+=a[l])%=p;
			int c1=col[l]^ver,c2=col[l+1]^ver;
			if(c1==c2) a[l+1]=qkm(a[l+1],a[l]);
			else if(!c1 && c2 && cnt&1) ver^=1;
			else rev^=1,ver^=1;
			l++;
		}
	}
	(ans+=a[l])%=p;
	fw(ans);
	return 0;
}
2023/10/1 11:04
加载中...