題目大意:略
傻了吧唧的我wa了好幾次
我的模擬功底真的不咋地
linux下用gets會報錯,我用的fgets
#include <string>
#include "stdio.h"
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long
#define N 1010
#define rint register int
#define ll long long
#define il inline
#define idx(x) (x-'a'+1)
#define idg(x) (x-'0')
using namespace std;
//re
int T,n,cnt,j;
int use[30];
char str[110][20];
inline bool isdig(char c)
{return ('0'<=c&&c<='9')?1:0;}
int dfs()
{
int ans=0,now=j,val=0,cal=0;
if(str[j][0]=='E') return -1;
if(str[j][0]=='F')
{
if(use[idx(str[j][2])])
return -1;
use[idx(str[j][2])]=1;
while(str[j+1][0]=='F')
{
j++,cal=dfs();
if(cal==-1) return -1;
ans=max(ans,cal);
}
int k=4;
while(isdig(str[now][k]))
val=val*10+idg(str[now][k]),k++;
k++;
if(str[now][4]=='n'){
if(str[now][6]!='n') ans=0;
}else if(!isdig(str[now][k])){
ans++;
}else{
int w=0;
while(isdig(str[now][k]))
w=w*10+idg(str[now][k]),k++;
if(val>w) ans=0;
}
}
use[idx(str[now][2])]=0;
j++;
if(str[j][0]!='E') return -1;
else return ans;
}
int main()
{
//freopen("complexity6.in","r",stdin);
scanf("%d",&T);
for(int t=1;t<=T;t++)
{
int q=0;
scanf("%d",&n);
memset(str,0,sizeof(str));
memset(use,0,sizeof(use));
scanf("%s\n",str[0]);
for(int i=1;i<=n;i++)
fgets(str[i],20,stdin);
int ret=0,ans=0;j=1;
for(;j<=n;j++){
ans=dfs();
if(ans==-1){ret=-1;printf("ERR\n");break;}
else {ret=max(ret,ans);}
}
if(ret==-1) continue;
int k=0,flag=0;
while(1){
if(str[0][k]=='n') flag=1;
if(!isdig(str[0][k]))
{k++;continue;}
while(isdig(str[0][k]))
q=q*10+idg(str[0][k]),k++;
break;
}
if(flag==0) q=0;
if(ret==q) printf("Yes\n");
else printf("No\n");
}
return 0;
}