zoukankan      html  css  js  c++  java
  • [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
  • 相关阅读:
    SQL Server 2005高级程序设计
    SQL语言艺术
    无益的程序
    Django Ajax动态图形监控
    C/C++ Qt 基本文件读写方法
    Django 实现统计网站访问状态
    Python 实现 WebSocket 通信
    Django Admin后台定制简单监控页
    Django Ajax 实现Web命令行执行
    C/C++ Qt QThread 线程组件应用
  • 原文地址:https://www.cnblogs.com/sdfzhsz/p/9665061.html
Copyright © 2011-2022 走看看