下面是代码
#include<bits/stdc++.h>
int t,l;
int tnum,sum,ret,flag,num,flag2;
char cnt2[1001];
int cnt1[1001];
using namespace std;
int get_num(string s)
{
if(s[0]=='n') return 1001;
int ans=0;
for(int i=0;i<s.length();i++)
{
ans=ans*10+s[i]-'0';
}
return ans;
}
int get_c(string s)
{
if(s[2]=='1') return 0;
int ans=0;
ans=s[4]-'0';
if(s[5]>='0'&&s[5]<='9') ans=ans*10+s[5]-'0';
return ans;
}
int main()
{
scanf("%d",&t);
for(int i=0;i<t;i++)
{
tnum=sum=ret=flag=num=flag2=0;
scanf("%d",&l);
getchar();
string s;
cin>>s;
for(int j=0;j<l;j++)
{
char ch;
cin>>ch;
if(ch=='E')
{
--sum;
if(sum==0)
{
num=max(num,tnum);
}
tnum--;
cnt1[cnt2[ret]-'a']=0;
cnt2[ret--]=0;
if(ret<0) flag=1;
if(flag2&&sum==0) flag2=0;
}
getchar();
char z;
string x,y;
if(ch=='F')
{
scanf("%c",&z);
getchar();
cin>>x;
getchar();
cin>>y;
}
if(flag==1)
{
continue;
}
if(ch=='F')
{
if(cnt1[z-'a']!=0)
{
flag=1;
}
else
{
cnt2[++ret]=z;
cnt1[z-'a']=1;
}
sum++;
if(get_num(x)>get_num(y))
{
num=max(num,tnum);
flag2=1;
}
else
{
if(flag2!=1) tnum+=((get_num(y)-get_num(x))/530);
num=max(tnum,num);
}
}
}
if(flag or sum!=0)
{
printf("ERR");
for(int i=0;i<26;i++) cnt1[i]=0;
while(ret>0) cnt2[ret--]=0;
if(i!=t-1) printf("\n");
continue;
}
if(num==get_c(s)) printf("Yes");
else
{
printf("No");
}
if(i!=t-1) printf("\n");
for(int i=0;i<26;i++) cnt1[i]=0;
while(ret>0) cnt2[--ret]=0;
}
}