求助
查看原帖
求助
261574
rmzls楼主2022/11/14 20:47

63pts

#include<bits/stdc++.h>
using namespace std;
int t,l,prg,aim,bigx,mx,visit[500];
stack<int>stk;
stack<char>num;
char xh,ii,nb;
bool ise,wfj;
int getnum(char a[]){
	if('1'>a[0]||a[0]>'9'){
		return 0;
	}
	int len=strlen(a);
	int ans=0;
	for(int i=0;i<len&&!('0'>a[i]||a[i]>'9');i++){
		ans*=10;
		ans+=a[i]-'0';
	}
	return ans;
}
int main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d",&l);
		while(!stk.empty()){
			stk.pop();
		}
		while(!num.empty()){
			num.pop();
		}
		memset(visit,0,sizeof(visit));
		ise=false;
		char fzd[10];
		cin>>fzd;
		bigx=0;
		mx=0;
		prg=0;
		int len=strlen(fzd);
		if(len>4){
			aim=getnum(fzd+4);
		}
		else{
			aim=0;
		}
		for(int i=1;i<=l;i++){
			cin>>xh;
			if(xh=='F'){
				char jj[5],kk[5];
				cin>>ii>>jj>>kk;
				if(visit[ii-'a']){
					ise=true;
				}
				if(((getnum(jj)&&getnum(kk))&&(getnum(jj)>getnum(kk)))||!getnum(jj)){
					int p=1;
					while(p&&i<=l){
						cin>>xh;
						if(xh=='F'){
							cin>>ii>>jj>>kk;
							p++;
						}
						else{
							p--;
						}
						i++;
//						printf("p:%d i:%d\n",p,i);
					}
					if(i==l){
						break;
					}
					continue;
				}
				visit[ii-'a']=1;
				num.push(ii);
				if(!getnum(kk)){
					stk.push(1);
					prg++;
					mx=max(prg,mx);
				}
				else{
					stk.push(0);
				}
			}
			else{
				if(stk.empty()){
					ise=true;
					continue;
				}
				if(stk.top()){
					prg--;
				}
				stk.pop();
				visit[num.top()-'a']=0;
				num.pop();
				bigx=max(bigx,mx);
			}
		}
		if(!stk.empty()||ise){
			printf("ERR\n");
			continue;
		}
		if(bigx==aim){
			printf("Yes\n");
		}
		else{
			printf("No\n");
		}
	}
	return 0;
}
2022/11/14 20:47
加载中...