关于今天月赛B
  • 板块题目总版
  • 楼主_caiji_
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/2/9 18:08
  • 上次更新2023/11/5 03:29:19
查看原帖
关于今天月赛B
390033
_caiji_楼主2021/2/9 18:08

拿桶做的,思路是一列有一个就改成 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

2021/2/9 18:08
加载中...