[洛谷]P3952 时间复杂度

[洛谷]P3952 时间复杂度

题目描述:

恶心的代码:

#include <bits/stdc++.h>
using namespace std;

inline void read(int &x){
    x=0;int f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar();
    }
    x*=f;
}

bool judge(string a,string b)
{
    if(a.size()>b.size())
        return 1;
    if(a.size()==b.size() && a>b)
            return 1;
    return 0;
}

int findO(string s)
{
    for(int i=0;i<s.length();i++)
        if(s[i]=='(')
        {
            if(s[i+1]=='n')
                if(isdigit(s[i+4]))
                    return (s[i+4]-'0')+10*(s[i+3]-'0');
                else
                    return s[i+3]-'0';
            if(isdigit(s[i+1]))
                return 0;
        }
}

string work(int line,int preans)
{
    map <char,bool> vis,used;
    vis.clear(),used.clear();
    stack <char> bl;

    int n=0,diedai=0;
    int flag=-1,fuck=0;
    string ansn;

    while(line--)
    {
        char ch;
        cin>>ch;
        if(ch=='F')
        {
            cin>>ch;
            string a,b;
            cin>>a>>b;
            if(fuck)
                continue;
            if(vis[ch])
            {
                ansn="ERR";
                fuck=1;
                continue;
            }
            bl.push(ch);
            vis[ch]=1;
            if(b=="n" && a!="n" && flag==-1)
            {
                diedai++;
                n=max(n,diedai);
                used[ch]=1;
            }
            if((a=="n" && b!="n") || (a!="n" && b!="n" && judge(a,b)))
                if(flag==-1)
                    flag=ch;
        }
        else
        {
            if(fuck)
                continue;
            if(bl.empty())
            {
                ansn="ERR";
                fuck=1;
                continue;
            }
            char ccc=bl.top();
            vis[ccc]=0;
            bl.pop();
            if(flag==ccc)
                flag=-1;
            if(used[ccc])
            {
                used[ccc]=0;
                diedai--;
            }
        }
    }
    if(bl.size())
        return "ERR";
    if(ansn=="ERR")
        return ansn;
    if(n==preans)
        return "Yes";
    else
        return "No";
}

int main(int argc, char const *argv[])
{
    int t;
    read(t);
    while(t--)
    {
        int l,n;
        string s;
        read(l);
        cin>>s;
        n=findO(s);
        cout<<work(l,n)<<endl;
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/wjsoj/p/11667681.html
今日推荐