[洛谷]P3952 时间复杂度

[洛谷]P3952 时间复杂度

题目描述:

恶心的代码:

#include <bits/stdc++.h>
using namespace std;

inline void read(int &x){
	x=0;int f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')
			f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=(x<<1)+(x<<3)+(ch^48);
		ch=getchar();
	}
	x*=f;
}

bool judge(string a,string b)
{
	if(a.size()>b.size())
		return 1;
	if(a.size()==b.size() && a>b)
			return 1;
	return 0;
}

int findO(string s)
{
	for(int i=0;i<s.length();i++)
		if(s[i]=='(')
		{
			if(s[i+1]=='n')
				if(isdigit(s[i+4]))
					return (s[i+4]-'0')+10*(s[i+3]-'0');
				else
					return s[i+3]-'0';
			if(isdigit(s[i+1]))
				return 0;
		}
}

string work(int line,int preans)
{
	map <char,bool> vis,used;
	vis.clear(),used.clear();
	stack <char> bl;

	int n=0,diedai=0;
	int flag=-1,fuck=0;
	string ansn;

	while(line--)
	{
		char ch;
		cin>>ch;
		if(ch=='F')
		{
			cin>>ch;
			string a,b;
			cin>>a>>b;
			if(fuck)
				continue;
			if(vis[ch])
			{
				ansn="ERR";
				fuck=1;
				continue;
			}
			bl.push(ch);
			vis[ch]=1;
			if(b=="n" && a!="n" && flag==-1)
			{
				diedai++;
				n=max(n,diedai);
				used[ch]=1;
			}
			if((a=="n" && b!="n") || (a!="n" && b!="n" && judge(a,b)))
				if(flag==-1)
					flag=ch;
		}
		else
		{
			if(fuck)
				continue;
			if(bl.empty())
			{
				ansn="ERR";
				fuck=1;
				continue;
			}
			char ccc=bl.top();
			vis[ccc]=0;
			bl.pop();
			if(flag==ccc)
				flag=-1;
			if(used[ccc])
			{
				used[ccc]=0;
				diedai--;
			}
		}
	}
	if(bl.size())
		return "ERR";
	if(ansn=="ERR")
		return ansn;
	if(n==preans)
		return "Yes";
	else
		return "No";
}

int main(int argc, char const *argv[])
{
	int t;
	read(t);
	while(t--)
	{
		int l,n;
		string s;
		read(l);
		cin>>s;
		n=findO(s);
		cout<<work(l,n)<<endl;
	}
	return 0;
}

posted @ 2019-10-13 18:15  WJSoj  阅读(116)  评论(0编辑  收藏  举报