zoukankan      html  css  js  c++  java
  • Luogu3952 NOIP2017D1T2 时间复杂度

    终于A了这傻逼题

    23号做了一下午全是ERR 玄学读入 晚上发现复杂度后面有一个换行没吞掉 没过样例 发现没有处理外循环无法进入内循环就不能计算 加了个标记 加了个ans计算最大复杂度交了一发64分

    24号弃坑一天

    25号早上调了1h 对着一组数据发现循环对总复杂度有影响才能在‘E’时减去复杂度 加了个标记数组82分 再来一组数据 淦 全是n的时候处理错了 改了发下标就A了

    就是加了一堆标记 就这样 所有情况都在这里了:

    (F x y (x ≤ y) , O(1))

    (F x y (x > y) , O(1)),且它所包含的循环时间复杂度全部忽略

    (F n x , O(1)),且它所包含的循环时间复杂度全部忽略

    (F n n , O(1))

    (F x n , O(n))

    CODE:

    #include<iostream>
    #include<cstdio>
    #include<string>
    using namespace std;
    int T, L;
    string O;
    string qwq[101];
    int main(){
        scanf("%d", &T);
        while(T--){
            int ans=0, num=0, youci=0, cuowu=0, kaishi=0, cengs=0, ncifang=0, x=0, y=0;
            bool sy[26]={0};
            int bianl[101]={0};
            int  kq=0;
            int jia[101]={0};
            scanf("%d", &L);
            cin>>O;
            for(int i=0; i<O.length(); i++){
                if(O[i]=='n') youci=1;
                if(O[i]>='0'&&O[i]<='9') num=num*10+O[i]-48;
            }
            char ch=getchar();
            while(ch!='
    ')ch=getchar();
            for(int i=1; i<=L; i++)
                getline(cin, qwq[i]);
            for(int i=1; i<=L; i++){
                if(qwq[i][0]=='F') kaishi=1;
                else if(qwq[i][0]=='E') kaishi=0;
                else cuowu=1;
                if(kaishi){
                    cengs++;
                    if(sy[qwq[i][2]-'a'])cuowu=1;
                    else sy[qwq[i][2]-'a']=1, bianl[cengs]=qwq[i][2]-'a';
                    int j=4;
                    x=0, y=0;
                    if(qwq[i][j]=='n') x=1000, j=5;
                    else for(; isdigit(qwq[i][j]); j++) x=x*10+qwq[i][j]-'0';
                    j++;
                    if(qwq[i][j]=='n') y=1000;
                    else for(; isdigit(qwq[i][j]); j++) y=y*10+qwq[i][j]-'0';
                    if(x==1000&&y==1000) continue;
                    if(x!=1000&&y==1000&&kq==0) ncifang++, jia[cengs]=1;
                    if(x!=1000&&y!=1000&&kq==0){
                        if(x>y) kq=cengs;
                        continue;
                    }
    
                    if(x==1000&&y!=1000&&kq==0){
                        kq=cengs;
                        continue;
                    }
                }
                else{
                    sy[bianl[cengs]]=0;
                    if(cengs==kq)kq=0;
                    if(jia[cengs])ncifang--, jia[cengs]=0;
                    cengs--;
                    if(cengs<0) cuowu=1;
                }
                ans=max(ans, ncifang);
                if(cuowu) break;
            }
            if(cengs>0)cuowu=1;
            if(cuowu)printf("ERR
    ");
            else if(youci&&num==ans) printf("Yes
    ");
            else if(!youci&&!ans) printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    微信验证代码
    微信内置浏览器的JS API
    伪类和伪元素
    asp.net core mvc 脚手架搭建过程介绍
    C#无锁内存队列
    关于微软OWIN的一篇好文章
    安装了Win10预览版10074,不能设置开发模式的bug解决
    关于Quartz的一些经历
    MEF接口应用初探
    简单的接口框架
  • 原文地址:https://www.cnblogs.com/pushinl/p/9847662.html
Copyright © 2011-2022 走看看