求助玄学错误
查看原帖
求助玄学错误
572193
witness_cy楼主2023/10/4 09:32

过样例但提交全WA,下载了样例#1之后发现输出和标答是一样的,请问这是怎么回事呢

#include<map>
#include<stack>
#include<string>
#include<cstdio>
#include<iostream>
using namespace std;

int T,L,ans;
string s[105];

bool isdigit(char c){
	return c>='0'&&c<='9';
}
int check(){
	map<char,int> mp; 
	stack<char> st;
	for(int i=1;i<=L;i++){
		if(s[i]=="E"){
			if(st.empty()) return 0;
			else mp[st.top()]=0,st.pop();
		}
		else{
			char name,x,y;
			sscanf(s[i].data(),"F %c %c %c",&name,&x,&y);
			if(mp[name]==1) return 0;
			st.push(name),mp[name]=1;
		}
	}
	
	if(!st.empty()) return 0;
	return 1;
}

int calc(){
	int cnt=0,asw=0,ret=0;
	map<char,int> mp;
	stack<char> st;
	
	for(int i=1;i<=L;i++){
		if(s[i]=="E"){
			if(mp[st.top()]==1) cnt--;
			if(mp[st.top()]==2) asw--;
			mp[st.top()]=0;st.pop();
		}
		else{
			char name;
			int x,y;
			int num=sscanf(s[i].data(),"F %c %d %d",&name,&x,&y);
			st.push(name);
			
			if((num==3&&x>y)||num==1){
			    cnt++,mp[name]=1;
			}
			else if(!cnt&&num==2) asw++,mp[name]=2;
		}
		ret=max(ret,asw);
	}
	return ret;
}
void solve(){
	
	cin>>L;
	string time;cin>>time;
	
	if(time=="O(1)") ans=0;
	else sscanf(time.data(),"O(n^%d)",&ans);
	
	for(int i=0;i<=L;i++) getline(cin,s[i]);
	
	if(!check()){
	    cout<<"ERR"<<'\n';return;
	}
	
	if(calc()==ans)
	    cout<<"YES"<<'\n';
	else 
	    cout<<"NO"<<'\n';
	    
	return;
}
int main(){
	cin>>T;
	while(T--) solve();
	return 0;
}
2023/10/4 09:32
加载中...