为什么啊,wa加re,(用的是队列模拟法)
查看原帖
为什么啊,wa加re,(用的是队列模拟法)
244597
kabout楼主2020/10/2 17:26
#include <bits/stdc++.h>
using namespace std;
bool v[11001];
int t,row,ma=-1,fu;
int c2,c3;
string fuza;
deque<int>F;
deque<char>c;
void f()
{
	if(fuza[2]>='0'&&fuza[2]<='9')fu=0;
	else fu=int(fuza[4]-'0');
}
void Change(string ch1,string ch2)
{
	if(ch1=="n")c2=int('n');
	if(ch2=="n")c3=int('n');
	if(!c2)	for(int j=1,i=ch1.size()-1;i>=0;i--,j*=10)c2+=int(ch1[i]-'0')*j;
	if(!c3)	for(int j=1,i=ch2.size()-1;i>=0;i--,j*=10)c3+=int(ch2[i]-'0')*j;
}
int main(){
	cin>>t;
	while(t--)
	{
		bool flag=0;
		char ch,ch1;
		string ch2,ch3;
		memset(v,0,sizeof(v));
		while(!F.empty())F.pop_front();
		ma=-1;
		F.push_back(0);
		cin>>row>>fuza;
	//	cout<<"new TURN"<<endl; 
		f();
	//	cout<<"standard: "<<fu<<endl;
		while(row)
		{
			cin>>ch;
			if(ch=='F')
			{
				cin>>ch1>>ch2>>ch3;
				c2=0,c3=0;
				Change(ch2,ch3);
//				if(t==4)cout<<c2<<"-"<<c3<<endl;
				c.push_back(ch1);
				if(v[ch1])
				{
					flag=1;	
//					cout<<"字符重复了。。。。。。。。。。。。。。。。。。。。。。"<<endl;				
				}
				v[ch1]=1;
				int tmp;
				if(c3>=0&&c3<=100&&c2>=0&&c2<=100&&c2<=c3)tmp=0;
				else if(c2==c3&&c2==int('n'))tmp=0;
				else if(c2>=0&&c2<=100&&c3==int('n'))
				{
					tmp=1;	
				}	
				else tmp=-1;
/*				else
				{
					cout<<ch1<<"--"<<c2<<"--"<<c3<<endl;
					row--;
					flag=1;
					F.push(0);
					continue;
				}*/							
			//	if(t==4)cout<<F.back()<<'-'<<tmp<<'-'<<F.size()<<"-"<<ma<<endl;
				if(F.back()!=-1)tmp+=F.back();
				else tmp=-1;
				ma=max(ma,tmp);
				F.push_back(tmp);
				row--;
			}
			else if(ch=='E')
			{
				v[int(c.back())]=0;
				c.pop_back();
				F.pop_back();
				row--;
			}
		}
/*		if(t==6)
		{
			cout<<"复杂度:"<<fu<<"--"<<"答案:"<<ma<<endl; 
			cout<<"标记:"<<flag<<"--"<<"F数组的长度:"<<F.size()<<endl;	
		}*/
		if(ma==-1)ma=0;
		if(flag||F.size()>1)cout<<"ERR"<<endl;
		else if(fu!=ma||F.size()==0)cout<<"No"<<endl;
		else if(fu==ma) cout<<"Yes"<<endl;
	}
    return 0;
}
2020/10/2 17:26
加载中...