P3952 时间复杂度

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
string tmp,b,a;
int xu,e,circle,flag,stop,l[27],g[100002],h,t,n,maxn,val[109];
int aa,bb;
char aaa;

void change(){
    xu=0,e=0,circle=0,flag=0,stop=0,h=0,n=0,maxn=0;
    memset(l,0,sizeof(l));
    memset(g,0,sizeof(g));
    memset(val,0,sizeof(val));
}
void get_time(){
    if(tmp[2]>'0'&&tmp[2]<='9')
        xu=0;
    if(tmp[2]=='n'){
        xu=tmp[4]-'0';
        if(tmp[5]>='0'&&tmp[5]<='9')
            xu=xu*10+(tmp[5]-'0');//5写成4了 
    }
}
void get_F(){
    cin>>aaa;
    e++;
    circle++;
    if(l[aaa-'a'+1]==1)    flag=-1;
    g[e]=aaa-'a'+1;
    l[aaa-'a'+1]=1;
    cin>>a>>b;//没有处理好字母-‘a’,数字-‘0’的关系 
    if(a[0]=='n'&&b[0]=='n')    return;//没有想到当n=n时也可以继续进行 
    if(a[0]=='n'){    if(stop==0)    stop=e;} 
    else{
        if(b[0]=='n'&&stop==0)    h++,val[circle]=1;
        else{
            aa=0,bb=0;
            int num_a=a.size();
            int num_b=b.size();
            for(int i=0;i<num_a;i++)
                aa=aa*10+(a[i]-'0');
            for(int i=0;i<num_b;i++)
                bb=bb*10+(b[i]-'0');
            if(aa>bb){    if(stop==0)    stop=e;}
        }//逻辑非常混乱,一开始也没想到用string型的,老是把后面的E读进来 
    }
}
void get_E(){
    l[g[circle]]=0;
    maxn=max(maxn,h);
    if(val[circle]==1)    h--;//没有考虑让h--,使复杂度一直累加(在存在循环{ 循环(结束) 循环}时结果错误 
    circle--;
}
int main(){
    scanf("%d",&t);
    while(t--){
        change();//清零
        scanf("%d",&n);
        cin>>tmp;
        get_time(); 
        for(int i=1;i<=n;i++){
            cin>>aaa;
            if(aaa=='F')    get_F();
            if(aaa=='E')    get_E();
            if(circle==0){
                maxn=max(maxn,h),h=0,e=0,stop=0;
                memset(val,0,sizeof(val));
            }    
            if(i==n&&circle!=0)    flag=-1;
        }
        if(flag==-1)    printf("ERR\n");
        else if(xu==maxn)    printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}
View Code

这个题我没有死抠题解因为我发现像这种题面很白痴,逻辑性要求非常之强的题,去理解别人的代码还不如自己去构造。

心态有点崩,出现了很多低级错误,

好处是锻炼了我的调试能力和耐心。

做出来后感觉也不是很难。

posted @ 2019-07-19 18:07  sdzmq  阅读(117)  评论(0编辑  收藏  举报