NOIP2017 D1T2 时间复杂度

NOIP2017 D1T2 时间复杂度

本题用栈模拟,我感觉会写中缀表达式求值那种难度题的人就可以在NOIP上A了此题了。(虽然我挂了,凉了,我也要用嘶哑的声音呼喊出:这题真水)

用栈pop和push的时候 维护 有效循环层数、无效循环(l>r)层数、相同字母  ,每次退栈时更新答案,就OK了 。

还有就是字符串的读入和处理不能写挂。

(在判定ERR之后把剩下的东西读干净再走)

 

#include<bits/stdc++.h>
#define INF 1000000007
using namespace std;
int T,head,N,Map[200],cnt1,cnt2,res,ans;//cnt1有效循环 cnt2无效循环 
char s[50];
struct Node{
    char c;int a,b;
}Stack[200];
int getint(){
    int sum=0,i=0,len=strlen(s);
    while(s[i]<'0'||s[i]>'9')i++;
    while(s[i]>='0'&&s[i]<='9'&&i<=len){sum=sum*10+s[i]-'0';i++;}
    return sum;
}
void Pop(){
    Map[Stack[head].c-'a'+1]=0;
    if(Stack[head].a>Stack[head].b)cnt2--;
    if(Stack[head].b==INF&&Stack[head].a!=INF&&cnt2==0)cnt1--;
    head--;
}
void Push(Node x){
    Map[x.c-'a'+1]=1;
    if(x.a>x.b)cnt2++;
    else if(x.b==INF&&x.a!=INF&&cnt2==0)cnt1++,res=max(res,cnt1);
    Stack[++head]=x;
}
void ToError(int x){
    for(int i=x+1;i<=N;i++){
        scanf("%s",s);
        if(s[0]=='F'){scanf("%s",s);scanf("%s",s);scanf("%s",s);}
    }
}
int main()
{
    scanf("%d",&T);
    while(T--){
        while(head>0)Pop();
        res=0;
        scanf("%d%s",&N,s);
        if(s[2]=='n'){ans=getint();if(!ans)ans=1;}
        else ans=0;
        for(int i=1;i<=N;i++){
            scanf("%s",s);
            if(s[0]=='F'){
                Node x;
                scanf("%s",s);x.c=s[0];
                scanf("%s",s);
                if(s[0]=='n')x.a=INF;else x.a=getint();
                scanf("%s",s);
                if(s[0]=='n')x.b=INF;else x.b=getint();
                if(Map[x.c-'a'+1]){
                    ToError(i);
                    puts("ERR");goto New;
                }
                Push(x);
            }
            else{
                if(head==0){
                    ToError(i);
                    puts("ERR");goto New;
                }
                Pop();
            }
        }
        if(head>0)puts("ERR");
        else if(ans==res)puts("Yes");
        else puts("No");
        New:
    ;
    }
    return 0;    
} 

 

posted @ 2017-11-21 21:25  Elfish?  阅读(443)  评论(0编辑  收藏  举报