#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],应该输出 0 ,可我的代码输出的是 1。
总之数据过水,请求加强数据。