zoukankan      html  css  js  c++  java
  • luogu 3952 时间复杂度

    noip2017 D1T2 时间复杂度 某zz选手考场上写了1.5h 考完之后发现自己写的是错的 但是结果A了???

    题目大意:

    一种新的编程语言 A++ 给出一个程序只有循环语句 并给出这个程序的时间复杂度

    判断每个程序给出的时间复杂度是否正确。

    A++语言的循环结构如下:

    F i x y
        循环体
    E

    其中F i x y表示新建变量i(变量i不可与未被销毁的变量重名)并初始化为 然后判断 和 y 的大小关系,若 i 小于等于 y 则进入循环 否则不进入

    每次循环结束后 i 都会被修改成 i +1,一旦 i 大于 y 终止循环

    x 和 y 可以是正整数(x 和 y 的大小关系不定)或变量 n  n 是一个表示数据规模的变量 在时间复杂度计算中需保留该变量而不能将其视为常数 该数远大于 100

    “E”表示循环体结束 循环体结束时,这个循环体新建的变量也被销毁 

    输入格式:

     T组数据

    每个程序我们只需抽取其中 F i x yE即可计算时间复杂度,注意:循环结构 允许嵌套。

    接下来每个程序的第一行包含一个正整数 L 和一个字符串,L 代表程序行数,字符串表示这个程序的复杂度

    O(1)表示常数复杂度,O(n^w)表示复杂度为n^w,其中w是一个小于100的正整数(输入中不包含引号),输入保证复杂度只有O(1)O(n^w) 两种类型

    接下来 L 行代表程序中循环结构中的F i x y或者 E

     程序行若以F开头,表示进入一个循环,之后有空格分离的三个字符(串)i x y, 其中 i 是一个小写字母(保证不为n),表示新建的变量名

    x 和 y 可能是正整数或 n ,已知若为正整数则一定小于 100

    程序行若以E开头,则表示循环体结束

    输出格式:

    输出文件共 t 行,对应输入的 t 个程序,每行输出YesNo或者ERR,若程序实际复杂度与输入给出的复杂度一致则输出Yes,不一致则输出No

    若程序有语法错误(其中语法错误只有: ① F 和 E 不匹配 ②新建的变量与已经存在但未被销毁的变量重复两种情况),则输出ERR 

    注意:即使在程序不会执行的循环体中出现了语法错误也会编译错误,要输出 ERR

    思路:

    模拟

    之前错的是因为没有考虑有两个进不去的循环嵌套(但还是A了

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstdlib>
     5 #include<cmath>
     6 #include<cstring>
     7 #include<vector>
     8 #include<map>
     9 #include<queue>
    10 #define ll long long 
    11 #define inf 2147483611
    12 #define MAXN 110
    13 #define MOD
    14 using namespace std;
    15 inline int read()
    16 {
    17     int x=0,f=1;char ch=getchar();
    18     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
    19     while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
    20     return x*f;
    21 }
    22 int T,n,t3,t2,ans,tmp,tp,len,st[MAXN],s[MAXN];
    23 char o[30],ch[4][4];
    24 bool hsh[30],k[MAXN],j[MAXN];
    25 int main()
    26 {
    27 
    28     //freopen("complexity.in","r",stdin);
    29     //freopen("complexity.out","w",stdout);
    30     T=read();
    31     bool f;int sp;
    32     while(T--)
    33     {
    34         n=read(),tmp=tp=ans=t3=t2=sp=0,f=1;scanf("%s",o);
    35         memset(hsh,0,sizeof(hsh));
    36         memset(j,0,sizeof(j));
    37         for(int i=1;i<=n;i++)
    38         {
    39             scanf("%s",ch[0]);
    40             if(ch[0][0]=='E') 
    41             {
    42                 hsh[st[tp]]=0;
    43                 if(k[s[tp]]) tmp--;
    44                 if(j[s[tp]]) sp--;
    45                 tp--;
    46                 if(tp<0) f=0;
    47                 continue;
    48             }
    49             tp++;
    50             s[tp]=i;
    51             cin>>ch[1]>>ch[2]>>ch[3];
    52             len=strlen(ch[2]);
    53             if(isdigit(ch[2][0])) t2=ch[2][0]-'0';
    54             else t2=inf;
    55             if(len==2) t2=t2*10+ch[2][1]-'0';
    56             len=strlen(ch[3]);
    57             if(isdigit(ch[3][0])) t3=ch[3][0]-'0';
    58             else t3=inf;
    59             if(len==2) t3=t3*10+ch[3][1]-'0';
    60             if(hsh[ch[1][0]-'a']) f=0;
    61             hsh[ch[1][0]-'a']=1;st[tp]=ch[1][0]-'a';
    62             if(t2>t3) {sp++;j[i]=1;}
    63             if(t2<t3&&t3==inf)
    64             {
    65                 tmp++;
    66                 k[i]=1;
    67                 if(sp) continue;
    68                 ans=max(ans,tmp);
    69             }
    70             else k[i]=0;
    71         }
    72         if(tp>0||!f) {puts("ERR");continue;}
    73         len=strlen(o);
    74         if(len==4&&ans==0) {puts("Yes");continue;}
    75         int l=o[len-2]-'0';
    76         if(isdigit(o[len-3])) l+=10*(o[len-3]-'0');
    77         if(len>4&&l==ans) {puts("Yes");continue;}
    78         puts("No");
    79     }
    80 }
    View Code
  • 相关阅读:
    记录k8s:k8s1.8.4无坑离线安装
    Aspose.Words 16.8 破解版、添加自定义HTML导出Jpeg压缩质量配置
    Mint linux 自定义上下文菜单实现ZIP压缩文件无乱码解压
    Mint Linux 安装 DotnetCore 遭遇无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
    微信多开技巧
    Pycharm5注册方式
    控制Linux下 mono 服务的启动停止
    Cesium 源码笔记[2] CesiumWidget模块的实例化过程 ver1.67
    Cesium 源码打包入门 [ver1.69]
    Cesium 源码笔记[1] Viewer模块实例化的大致过程 ver1.67
  • 原文地址:https://www.cnblogs.com/yyc-jack-0920/p/7875078.html
Copyright © 2011-2022 走看看