[洛谷]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;
}