下面是样例和代码,本来应该输出Yes的但是我的程序结果是No 题目传送门
//样例
1
74 O(n^11)
F a 31 n
F b 31 n
F c 70 32
F d 35 92
F e 56 n
F f 64 n
F g 35 n
F h 25 n
F i 63 n
F j 2 n
F k 68 70
E
E
E
E
E
E
E
E
E
E
E
F a 53 59
F b 84 85
F c 17 n
F d 47 n
F e 20 57
F f 90 94
F g 90 98
F h 46 n
F i 44 n
F j 24 n
F k 9 n
E
E
E
E
E
E
E
E
E
E
E
F a 41 n
F b 2 48
F c 32 n
F d 43 n
F e 68 n
F f 53 n
F g 18 86
F h 20 n
F i 56 n
F j 87 n
F k 51 n
F l 90 94
F m 82 n
F o 55 n
F p 70 87
E
E
E
E
E
E
E
E
E
E
E
E
E
E
E
#include<bits/stdc++.h>
using namespace std;
map<char,int> mp;
stack<char> T;
int ner[100010],len;
int num(string s){
int sum=1,ans=0;
for(int i=s.size()-1;i>=0;i--){
if('0'<=s[i]&&s[i]<='9'){
ans+=(s[i]-'0')*sum;
sum*=10;
}
else if((i+1)!=s.size()) break;
}
return ans;
}
int main(){
cin.tie(nullptr) -> ios::sync_with_stdio(false);
int t; cin>>t;
while(t--){
mp.clear(); while(!T.empty()) T.pop();
memset(ner,0,sizeof(ner)); len=0;
int p,sum1=0,sum2=0,sum3=0,mx=0,flg=0;
string s;
cin>>p>>s;
while(p--){
char F,a; string b,c;
cin>>F;
if(F=='F'){
cin>>a>>b>>c;
if(mp[a]!=1){ mp[a]=1; T.push(a);}
else{ flg=1;}
sum1++;
if( (b=="n")&&('0'<=c[0]&&c[0]<='9')||('0'<=b[0]&&b[0]<='9')&&('0'<=c[0]&&c[0]<='9')&&num(b)>num(c))
{ner[++len]=3; sum3++;}
if( ('0'<=b[0]&&b[0]<='9')&&('0'<=c[0]&&c[0]<='9') || b==c)
if(sum3==0){ ner[++len]=1;}
else{
sum3++;
ner[++len]=3;
}
if( ('0'<=b[0]&&b[0]<='9')&&(c=="n") ){
if(sum3==0){
ner[++len]=2;
sum2++;
mx=max(mx,sum2);
}
else{
sum3++;
ner[++len]=3;
}
}
}
else if(F=='E'){
sum1--;
if(!T.empty()){
char cn=T.top();
mp[cn]=0;
T.pop();
}
if(ner[len]==2) sum2--;
if(ner[len]==3) sum3--;
len--;
}
}
if(flg==1||sum1!=0) cout<<"ERR\n";
else{
if(mx==0&&s.size()==4) cout<<"Yes\n";
else if(mx==0) cout<<"No\n";
if(mx!=0&&s.size()>4){
if(num(s)==mx) cout<<"Yes\n";
else cout<<"No\n";
}
else if(mx!=0) cout<<"No\n";
}
// cout<<mx<<'\n';
}
}