拿桶做的,思路是一列有一个就改成 DONE(常数),相邻两列加起来是2就全改成 DONE,最后遍历一次,如果全是 DONE 就 RP,反之 ++。请问这有什么问题吗?
代码:
#include <cstdio>
#include <cstring>
using namespace std;
#define DONE -1
int T,n,a[100010];
char ipt[100010];
void check(){
for(int i=1;i<=n;i++){
if(a[i]!=DONE){
puts("++");
return ;
}
}
puts("RP");
}
void opt(){
for(int i=1;i<=n;i++) printf("%3d",a[i]);puts("");
}
int main(){
for(scanf("%d",&T);T--;){
memset(a,0,sizeof(a));
scanf("%d",&n);
scanf("%s",ipt+1);
for(int i=1;i<=n;i++){
a[i]+=ipt[i]-'0';
}
scanf("%s",ipt+1);
for(int i=1;i<=n;i++){
a[i]+=ipt[i]-'0';
}
if(n==1){
if(a[1]==2){
puts("++");
continue;
}
}
for(int i=1;i<=n-1;i++){
if(a[i]==DONE) continue;
if(a[i]+a[i+1]==2) a[i]=DONE,a[i+1]=DONE;
}
for(int i=1;i<=n;i++){
if(a[i]==1) a[i]=DONE;
}
for(int i=1;i<=n;i++){
if(a[i]==0) a[i]=DONE;
}
check();
}
return 0;
}
12分,6个点WA