• [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
  • 相关阅读:
    Centos7安装redis
    Cookie和Session的区别
    JavaWeb中的域对象
    ServletContext使用介绍
    Java Web核心组件之Servlet的使用介绍
    关于反射的杂谈
    leetcode117search-in-rotated-sorted-array
    23longest-consecutive-sequence
    leetcode24:word-ladder-ii
    leetcode25word-ladder
  • 原文地址:https://www.cnblogs.com/sdfzhsz/p/9665061.html
Copyright © 2020-2023  润新知