[NOIP2017]时间复杂度

最近做的最简单的一道模拟题Orz

终于把noip2017的都搞完了。

这道理有几个需要注意的小细节:

1.注意 F i n n的情况,相当与常数。

2.在不循环的部分也要记得判断是否重复变量

3.两个常数的时候记得比大小

其他也就没啥了。

考noip2017的时候栈是什么都不知道,只知道ZZ模拟,也不知道怎么判ERR,骗了50分(好厉害啊,膜去年的自己

代码如下(才60多行,好短啊)

#include <set>
#include <string>
#include <iostream>
#include <cctype>
#include <cstdio>
#include <cstring>
using namespace std;
int T,t,mx,top;
string s;
bool vis[250];
char stk[2050];
int getnum(string s) {
    int len=s.length(),x=0;
    for(int i=0;i<len;i++) {
        if(isdigit(s[i])) x=x*10+s[i]-'0';
    }
    return x;
}
bool chang[105];
struct Node{int x,y;};
Node get2num(string s) {
    int len=s.length(),i;Node x;x.x=x.y=0;
    for(i=0;i<len;i++) {if(isdigit(s[i])) x.x=x.x*10+s[i]-'0';else if(x.x)break;}
    for(int j=i;j<len;j++) if(isdigit(s[j])) x.y=x.y*10+s[j]-'0';
    return x;
}
int main() {
    cin>>T;
    while(T--) {
        scanf("%d ",&t);getline(cin,s);
        if(s[2]!='n'&&s[2]=='1') mx=0;
        else mx=getnum(s);bool flag=0;
        memset(vis,0,sizeof vis);memset(chang,0,sizeof chang);
        int flag2=999999,num=0,mxnum=0;top=0;
        while(t--) {
            getline(cin,s);
            if(flag) continue;
            if(flag2<=top) {
                if(s[0]=='F') {if(!vis[s[2]])stk[++top]=s[2],vis[s[2]]=1;else puts("ERR"),flag=1;}
                else if(s[0]=='E')vis[stk[top--]]=0;continue;
            }
            else flag2=999999;
            int len=s.length();
            if(s[0]=='F') {
                if(vis[s[2]]) {puts("ERR");flag=1;continue;}
                vis[s[2]]=1,stk[++top]=s[2];
                Node x=get2num(s);
                if(x.x==0&&x.y==0) {if(s[4]==s[6]) {chang[top]=1;continue;}}
                if(x.y) {if(x.x>x.y) {flag2=top;continue;}else {chang[top]=1;continue;}}
                else if(x.x&&(!isdigit(s[len-1]))){num++,mxnum=max(mxnum,num);}
                else {flag2=top;continue;}
            }
            else if(s[0]=='E') {
                if(top)    {if(!chang[top]) num--;else chang[top]=0;vis[stk[top--]]=0;}
                else {puts("ERR");flag=1;continue;}
            }
        }
        if(top&&flag==false) {puts("ERR");continue;}
        if(mx==mxnum&&flag==false) puts("Yes");
        else if(flag==false)puts("No");
    }
    return 0;
}
Complexity
我是咸鱼。转载博客请征得博主同意Orz
原文地址:https://www.cnblogs.com/sdfzhsz/p/9665061.html