本题数据过水
查看原帖
本题数据过水
437628
凤南天楼主2022/5/13 13:53
#include<bits/stdc++.h>
using namespace std;
string str;
bool failmode;
int sum,lon;
void xk(int &i){
    while(str[i]==' '){
        i++;
    }
    return;
}
void REPEAT(int i,int s){
    for(;i<str.length();i++){
        if(str[i]==']') break;
        if(str[i]=='F'){
            i+=2;
            xk(i);
            int a=0;
            while(str[i]>='0'&&str[i]<='9'){
                a*=10;
                a+=str[i++]-'0';
            }
            i--;
            if(!failmode)sum+=a;
        }
        if(str[i]=='B'){
            i+=2;
            xk(i);
            int a=0;
            while(str[i]>='0'&&str[i]<='9'){
                a*=10;
                a+=str[i++]-'0';
            }
            i--;
            if(!failmode)sum-=a;
        }
        if(str[i]=='R'){
            i+=6;
            xk(i);
            int a=0;
            while(str[i]>='0'&&str[i]<='9'){
                a*=10;
                a+=str[i++]-'0';
            }
            for(int j=0;j<a;j++)REPEAT(i,i);
            if(a==0){
                failmode=true;
                REPEAT(i,i);
            }
            if(!failmode)i+=lon;
            else{
                i+=lon;
                failmode=false;
            }
        }
    }
    lon=i-s;
    return;
}
int main(){
    getline(cin,str);
    for(int i=0;i<str.length();i++){
        if(str[i]=='F'){
            i+=2;
            xk(i);
            int a=0;
            while(str[i]>='0'&&str[i]<='9'){
                a*=10;
                a=a+str[i++]-'0';
            }
            sum+=a;
        }
        if(str[i]=='B'){
            i+=2;
            xk(i);
            int a=0;
            while(str[i]>='0'&&str[i]<='9'){
                a*=10;
                a+=str[i++]-'0';
            }
            sum-=a;
        }
        if(str[i]=='R'){
            i+=6;
            xk(i);
            int a=0;
            while(str[i]>='0'&&str[i]<='9'){
                a*=10;
                a+=str[i++]-'0';
            }
            for(int j=0;j<a;j++)REPEAT(i,i);
            if(a==0){
                failmode=true;
                REPEAT(i,i);
            }
            if(!failmode)i+=lon;
            else{
                i+=lon;
                failmode=false;
            }
        }
    }
    cout<<abs(sum);
    return 0;
}

我的这份代码可以AC,但是我hack了我的代码:

输入REPEAT 0[BK 1 REPEAT 0[BK 1]BK 1],应该输出 00 ,可我的代码输出的是 11

总之数据过水,请求加强数据。

2022/5/13 13:53
加载中...