求助99分
查看原帖
求助99分
315772
Drystynt楼主2021/2/16 09:24

采用的是三进制(0是白色,1是红色,2是蓝色),现在还不知道自己哪里伪了

#include <bits/stdc++.h>
using namespace std;
int T,n;
int a[100001],ans[100001];
inline void End()
{
    printf("++\n");
    return;
}
inline void check()
{
	cout<<endl;
	for(int i=1;i<=n;i++)	cout<<ans[i]/3;
	cout<<endl;
	for(int i=1;i<=n;i++)	cout<<ans[i]%3;
	cout<<endl;
}
int main()
{
    //ios::sync_with_stdio(0);
    cin>>T;
    for(int k=1;k<=T;k++)
    {
        scanf("%d\n",&n);
        for(int i=1;i<=n;i++){scanf("%1d",&a[i]);}
        for(int i=1;i<=n;i++){scanf("%1d",&ans[i]);ans[i]+=a[i]*3;}
        for(int i=1;i<=n;i++)
        {
            switch(ans[i])
            {
                //case 0:case 2:case 6:case 8:不管它
                case 1:
                {
                    if(i==1)    ans[i]=7;
                    else
                    {
                        if(ans[i-1]%3==0)   ans[i-1]+=2;
                        else ans[i]=7;
                    }
                }break;
                case 3:
                {
                    if(i==1)    ans[i]=5;
                    else
                    {
                        if(ans[i-1]<3)   ans[i-1]+=6;
                        else ans[i]=5;
                    }
                }break;
                case 4:
                {
                    if(i==1)
                    {
                        if(ans[2]!=0)   {End();goto end_o;}
                        else ans[2]=8;
                    }
                    else if(i==n)
                    {
                        if(ans[n-1]!=0) {End();goto end_o;}
                        else ans[n-1]=8;
                    }
                    else
                    {
                        if(ans[i-1]==0) ans[i-1]=8;
                        else if(ans[i-1]%3==0)
                        {
                            ans[i-1]+=2;
                            if(ans[i+1]<=2) ans[i+1]+=6;
                            else {End();goto end_o;}
                        }
                        else if(ans[i-1]<=2)
                        {
                            ans[i-1]+=6;
                            if(ans[i+1]%3==0) ans[i+1]+=2;
                            else {End();goto end_o;}
                        }
                        else
                        {
                        	if(ans[i+1]!=0)	{End();goto end_o;}
                        	else ans[i+1]=8;
						}
                    }
                }break;
                case 5:
                {
                    if(i==1)
                    {
                        if(ans[2]>2)   {End();goto end_o;}
                        else ans[2]+=6;
                    }
                    else if(i==n)
                    {
                        if(ans[n-1]>2) {End();goto end_o;}
                        else ans[n-1]+=6;
                    }
                    else
                    {
                        if(ans[i-1]<=2) ans[i-1]+=6;
                        else if(ans[i+1]<=2)ans[i+1]+=6;
                        else {End();goto end_o;}
                    }
                }break;
                case 7:
                {
                    if(i==1)
                    {
                        if(ans[2]%3!=0)   {End();goto end_o;}
                        else ans[2]+=2;
                    }
                    else if(i==n)
                    {
                        if(ans[n-1]%3!=0) {End();goto end_o;}
                        else ans[n-1]+=2;
                    }
                    else
                    {
                        if(ans[i-1]%3==0) ans[i-1]+=6;
                        else if(ans[i+1]%3==0)ans[i+1]+=6;
                        else {End();goto end_o;}
                    }
                }break;
            }
            //check();
        }
        cout<<"RP"<<endl;
        end_o:
        ;
    }
    return 0;
}
2021/2/16 09:24
加载中...