记录编号 584473 评测结果 AAAAAAAAAA
题目名称 [NOIP 2017]时间复杂度 最终得分 100
用户昵称 Gravatar┭┮﹏┭┮ 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2023-11-13 14:03:22 内存使用 0.00 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,char> P;
#define mk(x,y) make_pair(x,y) 
int t,n,s;
stack<P>st;
char a[10];
int v[510];
int fin(char c[10]){
    int l = strlen(c),ans = 0;
    for(int i = 0;i < l;i++){
        ans = ans * 10 + c[i] - '0';
    }
    return ans;
}
int main(){
    freopen("2017complexity.in","r",stdin);
    freopen("2017complexity.out","w",stdout);
    scanf("%d",&t);
    while(t--){
        while(!st.empty())st.pop();
        memset(v,0,sizeof(v));
        bool f = 0;s = 0;
        scanf("%d%s",&n,a);
//        cout<<a<<endl;
        for(int i = 1;i <= n;i++){
            char op[2];scanf("%s",op);
            if(op[0] == 'F'){
                char x[2],y[10],z[10];scanf("%s%s%s",x,y,z);
                if(v[x[0]]){f = 1;continue;}
                v[x[0]]++;
                if(!st.empty() && st.top().first == -1){
                    st.push(mk(-1,x[0]));
                }
                else if(y[0] == 'n' && z[0] != 'n'){
                    st.push(mk(-1,x[0]));
                }
                else if(y[0] != 'n' && z[0] == 'n'){
                    if(!st.empty())s = max(s,st.top().first+1),st.push(mk(st.top().first+1,x[0]));
                    else s = max(s,1),st.push(mk(1,x[0]));
                }
                else if(y[0] != 'n' && z[0] != 'n' && fin(y) > fin(z)){
                    st.push(mk(-1,x[0]));
                }
                else{
                    if(!st.empty())s = max(s,st.top().first),st.push(mk(st.top().first,x[0]));
                    else s = max(s,0),st.push(mk(0,x[0]));
                }
            }
            else{
                if(st.empty())f = 1;
                else v[st.top().second] = 0,st.pop();
            }
        }
        if(!st.empty())f = 1;
        int l = strlen(a),f1 = 0,u = 0;
        for(int i = 0;i < l;i++){
            if(a[i] == 'O' || a[i] == '(' || a[i] == ')')continue;
            if(a[i] == 'n' || a[i] == '^'){f1 = 1;continue;}
            u = u * 10 + a[i] - '0';
        }
        if(!f1)u = 0;
        if(f == 1)printf("ERR\n");
        else if(u == s)printf("Yes\n");
        else printf("No\n");
    }
    
    return 0;
    
}