NOIp2017时间复杂度

江枫思渺然 提交于 2019-12-01 09:05:15

比较复杂,调了好长时间不过以后再遇到这类题就好多了.

注意:

  1.栈里面存储时间复杂度,当循环不进去时赋值为-1000000(很小的数);

  2.即使已经判断为err也不能退出,要接着把数据读完,否则会影响到下一组读入的数据

  3.使用了 sscanf将字符转换为数字,不能写成x=sscanf();  sscanf(字符,"%d",&x);  

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
inline bool isnum(char x){ 
    return x>='0'&&x<='9';
}
int main(){
    int testcase; scanf("%d",&testcase);
    while(testcase--){
        int L,top=0,ans=0,sta[105][3]; 
        char tm[10];
        bool flag=1,vis[200];
        memset(vis,0,sizeof(vis)); 
        sta[0][0]=sta[0][1]=0;
        scanf("%d%s",&L,tm);
        while(L--){
            char a[10],b[10],c[10],d[10];
            scanf("%s",a);
            if(a[0]=='F'){
                scanf("%s%s%s",b,c,d);
                sta[++top][0]=b[0];
                if(vis[b[0]]) flag=0;
                vis[b[0]]=1;
                if(isnum(c[0])&&isnum(d[0])){
                    int x,y;
                    sscanf(c,"%d",&x);
                    sscanf(d,"%d",&y);
                    if(x>y) sta[top][1]=-1000000;
                    else sta[top][1]=sta[top-1][1];
                }else if(isnum(c[0])){
                    sta[top][1]=sta[top-1][1]+1;
                }else if(isnum(d[0])){
                    sta[top][1]=-1000000;
                }else sta[top][1]=sta[top-1][1];
                ans=max(ans,sta[top][1]);
            }else if(a[0]=='E'){
                if(!top) flag=0; 
                vis[sta[top][0]]=0;
                top--;
            }
        }
        if(top) flag=0;
        if(!flag){
            printf("ERR\n"); continue;
        }
        flag=1;
        if(isnum(tm[2])){
            if(ans!=0) flag=0;
        }else{
            int i=4,t=0;
            while(isnum(tm[i])){
                t=t*10+tm[i]-'0';
                i++;
            }
            if(ans!=t) flag=0;
        }
        if(!flag) printf("No\n");
        else printf("Yes\n");
    }
} 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!