蒟蒻求助……
第一个MLE,之后的WA了,数据下下来本机跑是对的
大佬帮忙看看
#include <bits/stdc++.h>
using namespace std;
bool s[10000],cha[10000];
char st[10000];
string a,z[10000],tot;
int n,zx,yx,top=0;
bool ff=0;
int check(){
zx=0;yx=0;
int x=4;
if(a[x]=='n') return -1;
while(a[x]>='0'&&a[x]<='9'){
zx=zx*10+a[x]-'0';
x++;
}
x++;
//cout<<zx<<" "<<"n"<<endl;
if(a[x]=='n') return 1;
while(a[x]>='0'&&a[x]<='9'){
yx=yx*10+a[x]-'0';
x++;
}
//cout<<zx<<" "<<yx<<endl;
if(zx>yx) return -1;
else {
cha[z[x][2]]=1;
}
}
int quzi(){
int res=0,x=4;
//cout<<"###"<<tot[x]<<endl;
while(tot[x]>='0'&&tot[x]<='9'){res=res*10+tot[x]-'0';x++;}
return res;
}
void push(int x){
char ch=z[x][2];
st[++top]=ch;
if(s[ch]==1) ff=1;
else s[ch]=1;
return ;
}
void pop(){
char ch=st[top];
s[ch]=0;
top--;
if(top<0) ff=1;
return ;
}
int main (){
int T;
cin>>T;
while(T--){
ff=0;top=0;
memset(s,0,sizeof(s));
memset(cha,0,sizeof(cha));
memset(st,0,sizeof(st));
cin>>n>>tot;
char ch=getchar();
for(int i=1;i<=n;i++){
getline(cin,z[i]);
//cout<<z[i]<<endl;
}
int ans=0;int maxx=0,um=0;
for(int i=1;i<=n;i++){
//cout<<i<<endl;
a=z[i];
if(a[0]=='F'){
push(i);
if(ff==1) {cout<<"ERR"<<endl;break;}
int num=check();
if(num==-1){
//cout<<"@"<<" ";
int f1=0,e1=0;
int j;
for(j=i+1;j<=n;j++){
if(z[j][0]=='F'){
f1++;
push(j);
if(ff==1) {cout<<"ERR"<<endl;break;}
}
else{
e1++;
pop();
if(ff==1) {cout<<"ERR"<<endl;break;}
if(e1-f1==1) break;
}
//左大于右,循环不执行
}
i=j;
//cout<<i<<endl;
//cout<<maxx<<endl;
}
//左大于右,跳出循环
else if(num==1)maxx++,ans=max(maxx,ans);
//cout<<maxx<<endl;
}
//F与E的判断
else{
if(cha[st[top]]!=1) maxx--;
pop();
//cout<<maxx<<" "<<top<<" ";
if(ff==1) {cout<<"ERR"<<endl;break;}
}
}
//cout<<ans<<endl;
if(ff==1) continue;
if(top!=0){cout<<"ERR"<<endl;continue;}
if(tot[2]=='n'){
int num=quzi();
//cout<<num<<endl;
if(num==ans) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
else {
if(ans!=0) cout<<"No"<<endl;
else cout<<"Yes"<<endl;
}
}
return 0;
}