73分求调
查看原帖
73分求调
983912
Linzijun_0607楼主2024/3/30 13:16
#include<bits/stdc++.h>
#define zfs signed main()
using namespace std;
const int N=5e5+5;
map<char ,bool>mp;
inline int num(string a){
	if(a=="n") return 0x3f3f3f3f;
	int p=0;
	for(int i=0;i<a.size();i++) p=p*10+a[i]-'0';
	return p;
}
zfs{
	int t;
	cin>>t;
	while(t--){
		mp.clear();
		int l,o,t=0;
		string oo;
		cin>>l>>oo;
		bool flag=1;
		for(int i=2,p=0;i<oo.size();i++){
			if(oo[i]=='1'&&flag) {
				o=0;
				break;
			}
			else if(oo[i]==')') o=p;
			else if(oo[i]=='n') flag=0;
			else if(oo[i]>='0'&&oo[i]<='9') p=p*10+oo[i]-'0';
		}
       //o为字符串的复杂度,O(1)记为0
		bool fffff=1;
		stack<char>bl;//变量名存储
		int lyl=0x3f3f3f3f;
		for(int i=1,now=0;i<=l;i++){
			char op,blm;
			cin>>op;
			string b,e;
            //blm变量名,b->x e->y
			if(op=='F'){
				cin>>blm>>b>>e;
				if(!fffff) continue;
				bl.push(blm);
				if(mp[blm]) {
                //变量名重复
					puts("ERR");
					fffff=0;
					continue;
				//	break;
				}
				mp[blm]=1;//标记
				if(lyl!=0x3f3f3f3f) continue;//b='n'的情况
				if((b=="n"&&e!="n")||num(b)>num(e)) lyl=bl.size();
				if(e=="n") {
					now++;
					if(b=="n") now--;//现在的复杂度
					t=max(t,now);
				}
			}else if(op=='E'){
				if(!fffff) continue;
				if(bl.empty()&&fffff){
					puts("ERR");
					fffff=0;
					continue;
				//	break;
				}
				blm=bl.top();
				bl.pop();
				if(lyl<=bl.size()){
					mp[blm]=0;
					lyl=0x3f3f3f3f;
					continue;
				}
				now--;
				mp[blm]=0;
			} 
		}
		if(!fffff) continue;
		if(bl.size()) puts("ERR");
		else if(t!=o) puts("No");
		else puts("Yes");
	}
}
2024/3/30 13:16
加载中...