WA on#10求调

P3952 [NOIP2017 提高组] 时间复杂度

John_wuyucheng @ 2025-01-11 11:36:27

#include<bits/stdc++.h>
#include<cstring>
using namespace std;
stack<char> st;//压栈压循环变量
bool ERR=0;
char flag=0;//flag表示在循环变量是什么的时候不执行
int l,w,w1;//w是最高层数,w1代表当前层数
string O,x,y;
char c,i1;
bool xu[30];
void solve(){
    cin>>c;
    if(c=='F'){
        cin>>i1>>x>>y;
        st.push(i1);
        if(xu[i1-'a']==1)ERR=1;
        else xu[i1-'a']=1;
        //对于初始x>y的情况不执行
        if(!ERR&&(x=="n"&&x!=y||x!="n"&&y!="n"&&stoi(x)>stoi(y)))flag=i1;
        else if(flag==0&&ERR==0&&x!=y&&y=="n"){
            w1++;
        }
    }else if(c=='E'){
        if(st.empty())ERR=1;
        if(!ERR)w=max(w1,w);
        if(!flag&&!ERR&&w1>0){
            w1--;
        }
        if(!ERR)xu[st.top()-'a']=0;
        if(!ERR)if(flag==st.top())flag=0;
        if(!ERR)st.pop();
    }
}
int main(){
    int t;
    cin>>t;
    while (t--){
        cin>>l>>O;
        ERR=0;
        w=0,w1=0;
        for(int i=0;i<30;i++)xu[i]=0;
        for(int i=0;i<l;i++){
            solve();
        }
        if(ERR)cout<<"ERR\n";
        else if(!st.empty())cout<<"ERR\n";
        else if(w==0&&O=="O(1)")cout<<"Yes\n";
        else if(w==0&&O!="O(1)")cout<<"No\n";
        else{
            string temp="O(n^"+to_string(w)+")";
            //cout<<temp<<" ";
            if(temp==O)cout<<"Yes\n";
            else cout<<"No\n";
        }
        while(!st.empty())st.pop();

    }
    return 0;
}

|