https://www.luogu.org/problemnew/show/P3952

这个模拟,注意每次进入循环的时候把新状态全部入栈,退出循环的时候就退栈。

第一次就错在发现ERR退出太及时,把剩余的信息留在流里面。

所以下次还是全部保存在字符串里面就好。一次下载一整段程序。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll; void solve() {
int l;
scanf("%d",&l);
char fzds[20];
scanf("%s",fzds);
int on=0;
if(fzds[3]!='^')
;
else {
for(int i=4; fzds[i]!=')'; i++) {
on=on*10+fzds[i]-'0';
}
}
//变量进栈的顺序
stack<char> chs;
//被占用的变量的标记 stack<bool> onplus;
bool used[256]= {};
int cnt=0; //当前的时间复杂度是n的几次方?
int curon=0;
//曾经到过的最高的复杂度
int maxon=0; //当前是否能运行至少一次,每次与栈顶取与之后放进去
stack<bool> currun;
currun.push(true); int res=1; int i;
for(i=0; i<l; i++) {
char ins[20];
scanf("%s",ins);
if(ins[0]=='E') {
cnt--;
if(cnt<0) {
//E比F还多
res=-1;
continue;
}
char ch=chs.top();
chs.pop();
used[(int)ch]=0;
if(onplus.top()==true) {
curon--;
}
onplus.pop();
currun.pop();
} else {
//是F,栈顶++
cnt++;
char ch[20];
scanf("%s",ch);
if(used[(int)ch[0]]) {
//变量名冲突
res=-1;
}
//变量名没有冲突
used[(int)ch[0]]=1;
chs.push(ch[0]); char s1[40],s2[40];
scanf("%s%s",s1,s2);
if(s1[0]=='n') {
//第一个变量是n,不可能增加复杂度
onplus.push(false);
if(s2[0]=='n') {
//至少进入1次,push一个成功标记
currun.push(true&currun.top());
} else {
//n比常数要大,push一个不行
currun.push(false);
}
} else {
//第一个不是n
if(s2[0]=='n') {
//第2个是n,当外层循环可以进入的时候复杂度+1
if(currun.top()) {
curon++;
maxon=max(curon,maxon);
onplus.push(true);
currun.push(true);
} else {
//外面不能进入这里
onplus.push(false);
currun.push(false);
}
} else {
//两个都不是n
onplus.push(false);
//常数时间 int t1=0,t2=0;
for(int j=0; s1[j]!='\0'; j++) {
t1=t1*10+s1[j]-'0';
}
for(int j=0; s2[j]!='\0'; j++) {
t2=t2*10+s2[j]-'0';
} //进入不了
if(t1>t2) {
currun.push(false);
} else {
//至少进入一次
currun.push(true&currun.top());
}
}
}
}
} if(res==-1) {
puts("ERR");
return;
} if(cnt) {
//有F没结束
puts("ERR");
return;
} else {
if(on==maxon) {
puts("Yes");
} else {
puts("No");
}
}
} int main() {
#ifdef Yinku
freopen("Yinku.in","r",stdin);
#endif // Yinku
int t;
scanf("%d",&t);
while(t--) {
solve();
}
}

洛谷 - P3952 - 时间复杂度 - 模拟的更多相关文章

  1. 洛谷P3952 时间复杂度(模拟)

    题意 题目链接 Sol 咕了一年的题解..就是个模拟吧 考场上写的递归也是醉了... 感觉一年自己进步了不少啊..面向数据编程的能力提高了不少 #include<bits/stdc++.h> ...

  2. 洛谷 P3952 时间复杂度 解题报告

    P3952 时间复杂度 题目描述 小明正在学习一种新的编程语言A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会 ...

  3. 洛谷P3952 时间复杂度【字符串】【模拟】

    题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写程序 ...

  4. 计蒜客 时间复杂度 (模拟) & 洛谷 P3952 时间复杂度

    链接 : Here! 思路 : 这是一道大模拟, 区分好情况就没问题了 循环构成部分 : $F , x , i , j$ 和 $E$ , 需要注意的是 $i , j$, - 分析 $i, j$ 的情况 ...

  5. 2018.11.02 洛谷P3952 时间复杂度(模拟)

    传送门 惊叹考场dubuffdubuffdubuff. 这题还没有梭哈难啊233. 直接按照题意模拟就行了. 代码: #include<bits/stdc++.h> using names ...

  6. 洛谷 P3952 时间复杂度【模拟】

    把No写成NO,WA了一发-- 现在看这题也不难-- 用一个栈,记一下前面F的字母,是否合法,合法的有多长,每次入栈弹栈即可 #include<iostream> #include< ...

  7. 洛谷P3952 时间复杂度

    大毒瘤...... 时隔快半年我终于花了两个小时堪堪A掉这一题...果然我还没有准备好. 想法:用DFS模拟递归. 时间复杂度的处理:每层循环取max,然后相加. 最大难点:各种繁杂而令人发指的特判. ...

  8. 洛谷 P3952时间复杂度 (本地AC测评RE的伪题解)

    [题目描述] 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写 ...

  9. 【题解】洛谷P3952 [NOIP2017TG] 时间复杂度(模拟)

    题目来源:洛谷P3952 思路 纯模拟没啥可说的了 果然好复杂 参考了你谷一个40行代码 代码 #include<iostream> #include<cstdio> #inc ...

随机推荐

  1. Struts2常见面试点

    01.  三层和MVC的区别 http://blog.csdn.net/csh624366188/article/details/7183872 http://www.cnblogs.com/zdxs ...

  2. hadoop2.3安装过程及问题解决

    三台serveryiprod01,02,03,当中01为namenode,02为secondarynamenode.3个均为datanode 3台server的这里提到的配置均需一样. 0.安装前提条 ...

  3. 关于button的自动刷新

    今天在开发中遇到了ajax传数据到后台,处理结果正常,返回的resultMap是一个Map<String,Object>类型,但是返回时显示'Fail to load response d ...

  4. API的理解和使用——哈希类型的命令

    哈希常用的命令复习 命令 功能 hset key field value 设置哈希值 hsetnx 设置哈希值,field或键必须不存在 hget 获取某个file对应的值 hdel 删除一个或多个f ...

  5. P4474 王者之剑

    P4474 王者之剑 题目大意 n*m的带权网格,任意选择起点开始时刻为0秒.以下操作,每秒按顺序执行 在第i秒开始的时候,在方格(x,y)上,获得(x,y)的值 在偶数秒,周围四格的值清零 每秒可选 ...

  6. java开发环境搭建-1

    安卓开发所需软件: JDK Eclipse Android-Sdk ADT 其中jdk的下载和安装,详细见http://www.cnblogs.com/zhuxiaohui/p/3620685.htm ...

  7. LVS与Keepalived

    lvs与Nginx区别 LVS的负载能力强,因为其工作方式逻辑非常简单,仅进行请求分发,而且工作在网络的第4层,没有流量,所以其效率不需要有过多的忧虑. LVS基本能支持所有应用,因为工作在第4层,所 ...

  8. ELK之方便的日志收集、搜索、展示工具

    大家在做分部署系统开发的时候是不是经常因为查找日志而头疼,因为各服务器各应用都有自己日志,但比较分散,查找起来也比较麻烦,今天就给大家推荐一整套方便的工具ELK,ELK是Elastic公司开发的一整套 ...

  9. 草原psd素材

    草原PSD素材,草原,风景,蓝天白云,飞鸟,阳光,绿色,草地. http://www.huiyi8.com/caoyuan/psd/

  10. hdu-5784 How Many Triangles(计算几何+极角排序)

    题目链接: How Many Triangles Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...