D1T2 时间复杂度(模拟)
难点在于1.保持耐心 2.模拟题一定要在草稿纸上考虑各种情况&处理后打代码 3.多造几组卡/特殊的数据测试
#include<bits/stdc++.h> #define ri register int #define ll long long #define For(i,l,r) for(ri i=l;i<=r;i++) #define Dfor(i,r,l) for(ri i=r;i>=l;i--) using namespace std; string a,b; int sen,com,cir,use[27],g[27],plex,go,ad[100],maxx,n,o; inline ll read(){ ll f=1,sum=0; char ch=getchar(); while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();} while(isdigit(ch)){sum=(sum<<1)+(sum<<3)+(ch^48);ch=getchar();} return f*sum; } int main(){ o=read(); while(o>0){ sen=com=cir=plex=go=maxx=n=0;o--; memset(use,0,sizeof(use)),memset(ad,0,sizeof(ad)); while(b[0]!='O'){ a=b;cin>>b; } for(int i=0;i<a.length();i++) sen=sen*10+a[i]-'0'; for(int i=4;i<b.length()-1;i++) com=com*10+b[i]-'0'; while(sen>0){ sen--;cin>>a; if(a[0]=='F'){ cir++;cin>>a; if(use[a[0]-96]) cir=-1; else use[a[0]-96]=1,g[cir]=a[0]-96; cin>>a>>b; if(a[0]!='n'&&b[0]=='n'&&go==0) plex++,ad[cir]=1; else if(((a.length()==b.length()&&a>b)||(a.length()>b.length())||(a[0]=='n'&&b[0]!='n'))&&go==0) go=1,n=cir; } else{ maxx=max(maxx,plex);use[g[cir]]=0; if(ad[cir]==1) plex--,ad[cir]=0; cir--; if(n>0&&cir<n) go=n=0; } if(cir==-1) printf("ERR\n"),sen=-1; } if(cir>0) printf("ERR\n"); if(cir==0&&maxx==com) printf("Yes\n"); if(cir==0&&maxx!=com) printf("No\n"); } return 0; }