【2017】

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;
}
View Code

猜你喜欢

转载自www.cnblogs.com/jian-song/p/11853505.html