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;
    }
    
  • 相关阅读:
    项目有大小,生存各有道
    学习Spark——那些让你精疲力尽的坑
    学习Spark——环境搭建(Mac版)
    小程序新能力-个人开发者尝鲜微信小程序
    如何写出好代码
    华为手机nova2s使用第三方字体库
    std::string与std::wstring互相转换
    Steam安装Google Earth VR
    osgearth2.8关于RectangleNodeEditor编辑点不可见的问题
    Qt生成ui文件对应的.h和.cpp文件
  • 原文地址:https://www.cnblogs.com/pushinl/p/9847662.html
Copyright © 2011-2022 走看看