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. Hadoop实战-Flume之Source multiplexing(十五)

    a1.sources = r1 a1.sinks = k1 k2 a1.channels = c1 c2 # Describe/configure the source a1.sources.r1.t ...

  2. IDEA tomcat三步实现热部署

    IDEA tomcat三步实现热部署 添加Artifacts选项 添加Artifacts选项,XXXwar 和 XXXwar exploded二选一,若要热部署须选后者. 设置tomcat部署方案 设 ...

  3. php分10个不同等级压缩优化图片(PNG)

    今天找到一个php写的压缩图片程序,可以分10个等级(0-9)来压缩,0等级时压缩比率不是很大,图片不会失真:随着压缩等级不断增大,图片会变得越来越不清晰,通常压缩后图片大小可以减少到原来的50%,压 ...

  4. High Performance Browser Networking

    Chapter 1. Primer on Latency and Bandwidth As a result, to improve performance of our applications, ...

  5. IOS 获取 文件(UIImage) 创建时间

    Image 在手机里 如果是手机拍的那么能使用ALAssetsLibrary获取一系列 图片的信息 颜色.GPS.尺寸.创建日期等 使用ALAssetsLibrary导入框架AssetsLibrary ...

  6. GCC的-wl,-rpath=参数

    使用GCC编译动态链接库的项目时,在其他目录下执行很可以出现找不到动态链接库的问题. 这种情况多发生在动态链接库是自己开发的情况下,原因就是程序运行时找不到去何处加载动态链接库. 可能会说在编译时指定 ...

  7. Android字符设备驱动开发基于高通msm8916【原创 】

    本人才疏浅学,写一篇文档总结自己在msm8916平台上移植自己编写的简单的字符设备驱动开发的整个流程.这个小项目的主要功能是开发一个简单的APP,APP通过JNI去调用位于kernel的字符设备驱动. ...

  8. Spring Boot2.0之全局捕获异常

    全局捕获异常,很明显的错误404返回给客户,很不好呀.整个web请求项目全局捕获异常,比如空指针直接返回给客户啊,那多操蛋呀~ 看这几个常用的注解: @ExceptionHandler 表示拦截异常 ...

  9. Contiki Rtimer 模块

    一.rtimer概述 The Contiki rtimer library provides scheduling and execution of real-time tasks (with pre ...

  10. spring框架IOC原理分析代码

    模拟ClasspathXmlApplication: package junit.test; import java.beans.Introspector; import java.beans.Pro ...