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