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

题目大意:

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

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

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

F i x y
循环体
E

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

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

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

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

输入格式:

T组数据

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

接下来每个程序的第一行包含一个正整数 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 个程序,每行输出Yes或No或者ERR,若程序实际复杂度与输入给出的复杂度一致则输出Yes,不一致则输出No

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

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

思路:

模拟

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

 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<vector>
#include<map>
#include<queue>
#define ll long long
#define inf 2147483611
#define MAXN 110
#define MOD
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int T,n,t3,t2,ans,tmp,tp,len,st[MAXN],s[MAXN];
char o[],ch[][];
bool hsh[],k[MAXN],j[MAXN];
int main()
{ //freopen("complexity.in","r",stdin);
//freopen("complexity.out","w",stdout);
T=read();
bool f;int sp;
while(T--)
{
n=read(),tmp=tp=ans=t3=t2=sp=,f=;scanf("%s",o);
memset(hsh,,sizeof(hsh));
memset(j,,sizeof(j));
for(int i=;i<=n;i++)
{
scanf("%s",ch[]);
if(ch[][]=='E')
{
hsh[st[tp]]=;
if(k[s[tp]]) tmp--;
if(j[s[tp]]) sp--;
tp--;
if(tp<) f=;
continue;
}
tp++;
s[tp]=i;
cin>>ch[]>>ch[]>>ch[];
len=strlen(ch[]);
if(isdigit(ch[][])) t2=ch[][]-'';
else t2=inf;
if(len==) t2=t2*+ch[][]-'';
len=strlen(ch[]);
if(isdigit(ch[][])) t3=ch[][]-'';
else t3=inf;
if(len==) t3=t3*+ch[][]-'';
if(hsh[ch[][]-'a']) f=;
hsh[ch[][]-'a']=;st[tp]=ch[][]-'a';
if(t2>t3) {sp++;j[i]=;}
if(t2<t3&&t3==inf)
{
tmp++;
k[i]=;
if(sp) continue;
ans=max(ans,tmp);
}
else k[i]=;
}
if(tp>||!f) {puts("ERR");continue;}
len=strlen(o);
if(len==&&ans==) {puts("Yes");continue;}
int l=o[len-]-'';
if(isdigit(o[len-])) l+=*(o[len-]-'');
if(len>&&l==ans) {puts("Yes");continue;}
puts("No");
}
}

luogu 3952 时间复杂度的更多相关文章

  1. luogu 3952 时间复杂度(模拟)

    时间复杂度 这道题从两个月前开始做,一直没做出来,最后今晚决心一定要做出来.于是开始认真的在打草纸上写思路,最后在AC的那一刻,差点哭了出来!! 题目大意 这个自己看吧,noip2017的D1T2 s ...

  2. [Luogu 3952] NOIP2017 时间复杂度

    [Luogu 3952] NOIP2017 时间复杂度 一年的时间说长不长,说短,也不短. 一年之内无数次觉得难得可怕的题目,原来也就模拟这么回事儿. #include <cstdio> ...

  3. luogu P3952 时间复杂度 模拟

    题目链接 luogu P3952 时间复杂度 题解 直接模拟即可 注意不要直接return 我真是naive ...... 代码 #include<map> #include<sta ...

  4. 【luogu P3952 时间复杂度】 题解

    对于2017 D1 T2 这道题 实实在在是个码力题,非常考验耐心. 其实大体的思路并不是非常难想出来,但是要注意的小细节比较多. 题目链接:https://www.luogu.org/problem ...

  5. [LUOGU] P3952 时间复杂度

    其实,也没那么难写 这种模拟题,仔细分析一下输入格式,分析可能的情况,把思路写在纸上,逐步求精,注意代码实现 主要思路就是算一个时间复杂度,和给出的复杂度比较,这就先设计一个函数把给出的复杂度由字符串 ...

  6. [NOIp2017] luogu P3952 时间复杂度

    跪着看评测很优秀. 题目描述 给你若干个程序,这些程序只有 For 循环,求这些程序的时间复杂度. Solution 大模拟.讲下细节. flag[i]flag[i]flag[i] 表示第 iii 位 ...

  7. [Luogu] 时间复杂度

    https://www.luogu.org/problemnew/show/P3952 考场上输出的是 "YES" "NO" ++ ,如果不是亲身经历,打死我我 ...

  8. luogu P4183 Cow at Large P (暴力吊打点分治)(内有时间复杂度证明)

    题面 贝茜被农民们逼进了一个偏僻的农场.农场可视为一棵有N个结点的树,结点分别编号为 1,2,-,N .每个叶子结点都是出入口.开始时,每个出入口都可以放一个农民(也可以不放).每个时刻,贝茜和农民都 ...

  9. [luogu P2647] 最大收益(贪心+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,--,n.你可以在这当中任意选择任意多个物品. ...

随机推荐

  1. MySQL-----增

    增 **创建用户** create user 'alex'@'192.168.1.1' identified by '123123'; create user 'alex'@'192.168.1.%' ...

  2. Python之面向对象新式类和经典类

    Python之面向对象新式类和经典类 新式类和经典类的继承原理: 在Python3中,就只有新式类一种了. 先看Python3中新式类: 类是有继承顺序的: Python的类是可以继承多个类的,也就是 ...

  3. 【HDU 2196】 Computer(树的直径)

    [HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...

  4. popup介绍

    一.作用 用于使浏览器自动生成弹窗 二.示例 1.新建Django项目,新建APP:app01, 项目根目录下新建文件夹static 2.静态文件配置,在settings.py中配置static: 3 ...

  5. Quartz.Net 学习之路01 安装Quartz.Net

    Quartz.Net 系列文章的第一篇,至于Quartz.Net 是做什么的我就不介绍了,相信要用到它的都知道它是用来干嘛的: Quartz.Net安装方法: 1.打开项目,在VS“工具”菜单选中“库 ...

  6. 牛客网暑期ACM多校训练营(第二场)B discount

    链接:https://www.nowcoder.com/acm/contest/140/B来源:牛客网 题目描述 White Rabbit wants to buy some drinks from ...

  7. L2-001. 紧急救援 (Dijkstra算法打印路径)

    作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市有紧急求 ...

  8. css3 & background & background-image

    css3 & background & background-image https://developer.mozilla.org/en-US/docs/Web/CSS/backgr ...

  9. 文件权限设置与http,php的关系

    在web服务器上的文件要使用什么权限比较好呢.我开始的时候直接都是777,后台安全部门的同事,通过漏洞把我管理的服务器给搞了.报告到我这里,我才意识到权限的设置不能马虎.环境采用nginx+php,一 ...

  10. [NOIP2006] 提高组 洛谷P1065 作业调度方案

    题目描述 我们现在要利用m台机器加工n个工件,每个工件都有m道工序,每道工序都在不同的指定的机器上完成.每个工件的每道工序都有指定的加工时间. 每个工件的每个工序称为一个操作,我们用记号j-k表示一个 ...