xycsc23 @ 2024-10-04 17:37:33
代码如下:
#include<bits/stdc++.h>
using namespace std;
struct node{
char c;
int r;
};
int gi(string a){
int s=0;
for(int i=0;i<a.size();i++)
s=s*10+(a[i]-'0');
return s;
}
void slove(){
stack<node> s;
int l, w;
char twob;
scanf("%d O(%c", &l, &twob);
if(twob=='1')
w=0;
else
scanf("^%d", &w);
scanf(")\n");
int ma=0, m=0, g=0;
map<char, bool> mp;
bool f=false;
while(l--){
string sb;
getline(cin, sb);
if(sb[0]=='F'){
// cout<<"qwq";
if(mp.count(sb[2]) && mp[sb[2]]){
f=true;
}
if(f)
continue;
if(g){
g++;
continue;
}
char r=sb[2];
mp[r]=true;
int x, y;
if(sb[4]=='n')
x=101, sb=sb.substr(6);
else
x=gi(sb.substr(4, sb.find(' ', 4)-4)), sb=sb.substr(sb.find(' ', 4)+1);
if(sb=="n")
y=101;
else
y=gi(sb);
if(x==101){
if(y==101)
s.push((node){0, r});
else{
s.push((node){-1, r});
g=1;
}
}
else{
if(y==101){
s.push((node){1, r});
m++;
}
else if(x<y)
s.push((node){0, r});
else
s.push((node){-1, r}), g=1;
}
ma=max(ma, m);
}
else{
if(s.empty()){
f=true;
}
if(f)
continue;
if(s.top().r==-1)
g--;
else
m-=s.top().r;
mp[s.top().c]=false;
s.pop();
}
}
if(f || !s.empty())
puts("ERR");
else if(ma==w)
puts("Yes");
else
puts("No");
}
int main(){
int t;
cin>>t;
while(t--)
slove();
return 0;
}
by Cells @ 2024-10-24 18:52:34
@13548940890xyc 本人下载数据实测,在有字母 E
循环结束的时候没有把变量的使用从 true
变成 false
,导致后面的全部输出 ERR
。