P3952 [NOIP2017 提高组] 时间复杂度

样例解释:`第七个程序第一重循环无法进入,故为常数复杂度。`
by zjpwdyf @ 2023-10-18 13:36:00


```cpp #include<cstdio> #include<stack> #include<string> #include<iostream> #include<algorithm> using namespace std; const int maxl=105; int t,l,w; string o; string code[maxl]; int sread(int &x,string c){ int res=0; int len=c.size(); while(c[x]<'0' || c[x]>'9'&&x<c.size()){ if(c[x]=='n'){ ++x; return 1000000; } ++x; } while(c[x]>='0' && c[x]<='9'){ res*=10;res+=c[x]-'0'; ++x; } return res; } int geto(){ int res=0,x=3; int len=o.size(); if(o[2]=='n') res=sread(x,o); else res=0; return res; } int check(){ int res=0,now=0; int a,b,x; stack<int> s; int flag=-1; bool ins[26]={0}; bool ef[26]={0}; for(int i=1;i<=l;i++){ if(code[i][0]=='F'){ int k=code[i][2]-'a'; if(ins[k]) return -1; s.push(k);ins[k]=true; x=4; a=sread(x,code[i]);b=sread(x,code[i]); if(b-a>1000) { if(flag==-1){ now++; res=max(res,now); ef[k]=true; } } if(a>b){ if(flag==-1) flag=k; } } if(code[i][0]=='E'){ if(s.empty()) return -1; int k=s.top(); s.pop();ins[k]=false; if(flag==k) flag=-1; if(ef[k]){ ef[k]=false; now--; } } } if(s.size()) return -1; return res; } int main(){ scanf("%d",&t); while(t--){ int ww; scanf("%d ",&l); getline(cin,o); w=geto(); for(int i=1;i<=l;i++) getline(cin,code[i]); ww=check(); if(ww==-1) puts("ERR"); else{ if(ww==w) puts("Yes"); else puts("No"); } } } ```
by quxiangyu @ 2024-01-24 20:03:52


|