1-10RE 求救…
查看原帖
1-10RE 求救…
239164
Meteorshower_Y楼主2022/1/22 19:06

数据:

4
4 O(n^2)
F a 32 n
F b 69 n
E
E
2 O(n^2)
F a 60 n
E
4 O(n^4)
F a 67 n
F b 36 n
E
E
10 O(n^4)
F a 78 81
F b 73 98
F c 7 n
F d 46 n
F e 35 n
E
E
E
E
E

#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<stack>
using namespace std;
int t,n,cnt,k,flag;
char op,ch;
bool vis[26],as;
string s,a;
stack<char> c;
stack<bool> crd;
inline void init()
{
    as=0;
    k=0;cnt=0;
    for(int i=0;i<26;i+=1)
        vis[i]=false;
    while(!c.empty())
        c.pop();
    while(!crd.empty())
        crd.pop();
}
inline bool optf()
{
    string x[5];
    int rnk=1;
    ch=a[2];
    for(int i=4;i<a.size();i+=1)
    {
        if(a[i]==' ') rnk+=1;
        else if(a[i]<='9'&&a[i]>='0') x[rnk]+=a[i];
        else if(a[i]=='n') x[rnk]="n";
    }
    if(vis[ch-'a']) return false;
    vis[ch-'a']=1;
    c.push(ch);
    if(as)
    {
        crd.push(false);
        return true;
    }
    if(x[1]=="n"&&x[2]=="n")
    {
        crd.push(false);
        return true;
    }
    else if(x[1]=="n")
    {
        int num=0;
        for(int i=0;i<x[2].size();i+=1)
            num=num*10+(x[2][i]-'0');
        if(num<=100)
        {
            as=1;
            flag=cnt;
            crd.push(false);
            return true;
        }
        else 
        {
            cnt+=1;
            k=max(cnt,k);
            crd.push(true);
            return true;
        }
    }
    else if(x[2]=="n")
    {
        cnt+=1;
        k=max(cnt,k);
        crd.push(true);
        return true;
    }
    else
    {
        crd.push(false);
        return true;
    }
}
inline bool opte()
{
    if(crd.empty()) return false;
    if(crd.top()) cnt-=1;
    crd.pop();
    if(cnt<0) return false;
    if(c.empty()) return false;
    vis[c.top()]=false;
    c.pop();
    if(as&&cnt<false) as=false;
    return true;
}
inline void work()
{
    init();
    cin>>n>>s;
    getchar();
    for(int i=1;i<=n;i+=1)
    {
        getline(cin,a);
        if(a[0]=='F')
        {
            if(!optf())
            {
                printf("ERR\n");
                return ;
            }
        }
        else if(a[0]=='E')
        {
            if(!opte())
            {
                printf("ERR\n");
                return ;
            }
        }
    }
    if(cnt)
    {
        printf("ERR\n");
        return ;
    }
    int l=s.size();
    if(s[2]=='1')
    {
        if(k==0)
        {
            printf("Yes\n");
            return ;
        }
        else
        {
            printf("No\n");
            return ;
        }
    }
    else
    {
        int num=0;
        for(int i=4;i<l-1;i+=1)
            num=num*10+(s[i]-'0');
        
        if(num==k)
        {
            printf("Yes\n");
            return ;
        }
        else
        {
            printf("No\n");
            return ;
        }
    }
    return ;
}
int main()
{
    scanf("%d",&t);
    while ((t--))
        work();
    return 0;
}
2022/1/22 19:06
加载中...