本机能对,交上去之后MLE+WA
查看原帖
本机能对,交上去之后MLE+WA
237806
wcyares楼主2020/9/11 16:05

蒟蒻求助……

第一个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;
}
2020/9/11 16:05
加载中...