P3952 时间复杂度

——————————————————————————————————————————————————

noip罕见的纯模拟题,细节还是很多的

虽然没有看题解,但也错了很多地方

1,Yes与YES

2,ERR与Err,这个真的毒瘤,一个全大写一个却不是

 3,ERR后向栈中添加元素防止RE

4,最后判断栈空、

————————————————————————————————————————-

#include<bits/stdc++.h>
using namespace std;
int t,lne,flg[500],num[500];
char ch[100];
stack<int>st,bl;
int main()
{
    cin>>t;
    while(t--)
    {
        memset(flg,0,sizeof(flg));
        memset(num,0,sizeof(num));
        while(!st.empty())st.pop();
        while(!bl.empty())bl.pop();
        int tag=0,lj=0,tab=0,nowtab=0;
        cin>>lne>>ch;
        if(lne%2!=0)lj=1;
        if(ch[2]-'0'!=1)for(int i=4;i<strlen(ch)-1;i++)tag=tag*10+ch[i]-'0';
        while(lne--)
        {
            char a,b;
            int cc=0,dd=0;
            cin>>a;
            if(a=='F'){
                cin>>b;
                cin>>ch;
                if(ch[0]<='9'&&ch[0]>='0')for(int i=0;i<strlen(ch);i++)cc=cc*10+ch[i]-'0';
                cin>>ch;
                if(ch[0]<='9'&&ch[0]>='0')for(int i=0;i<strlen(ch);i++)dd=dd*10+ch[i]-'0';
                if(flg[b-'0'])lj=1;
                if(!cc&&!dd)st.push(0);
                if(!cc&&dd)st.push(-1);
                if(!dd&&cc)st.push(1);
                if(dd&&cc){
                    if(cc>dd)st.push(-1);
                    else st.push(0);
                }
                flg[b-'0']=1;
                bl.push(b-'0');
            }
            if(a=='E'){
                if(st.empty()){
                lj=1;for(int i=1;i<=100;i++)st.push(i),bl.push(i);    
                }
                int nc=st.top(),nb=bl.top(),val=num[nb];
                st.pop();
                bl.pop();
                flg[nb]=0;
                num[nb]=0;
                if(nc!=-1){
                if(st.empty())tab=max(tab,val+nc);    
                else num[bl.top()]=max(val+nc,num[bl.top()]);
                }
            }
        }
        if(!st.empty())lj=1;
        if(lj)cout<<"ERR";
        else {
            if(tab==tag)cout<<"Yes";
            else cout<<"No";
        }
        cout<<endl;
    }
}
原文地址:https://www.cnblogs.com/SFWR-YOU/p/11391259.html