采用的是三进制(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;
}