洛谷 - P3952 - 时间复杂度 - 模拟
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 - 时间复杂度 - 模拟的更多相关文章
- 洛谷P3952 时间复杂度(模拟)
题意 题目链接 Sol 咕了一年的题解..就是个模拟吧 考场上写的递归也是醉了... 感觉一年自己进步了不少啊..面向数据编程的能力提高了不少 #include<bits/stdc++.h> ...
- 洛谷 P3952 时间复杂度 解题报告
P3952 时间复杂度 题目描述 小明正在学习一种新的编程语言A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会 ...
- 洛谷P3952 时间复杂度【字符串】【模拟】
题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写程序 ...
- 计蒜客 时间复杂度 (模拟) & 洛谷 P3952 时间复杂度
链接 : Here! 思路 : 这是一道大模拟, 区分好情况就没问题了 循环构成部分 : $F , x , i , j$ 和 $E$ , 需要注意的是 $i , j$, - 分析 $i, j$ 的情况 ...
- 2018.11.02 洛谷P3952 时间复杂度(模拟)
传送门 惊叹考场dubuffdubuffdubuff. 这题还没有梭哈难啊233. 直接按照题意模拟就行了. 代码: #include<bits/stdc++.h> using names ...
- 洛谷 P3952 时间复杂度【模拟】
把No写成NO,WA了一发-- 现在看这题也不难-- 用一个栈,记一下前面F的字母,是否合法,合法的有多长,每次入栈弹栈即可 #include<iostream> #include< ...
- 洛谷P3952 时间复杂度
大毒瘤...... 时隔快半年我终于花了两个小时堪堪A掉这一题...果然我还没有准备好. 想法:用DFS模拟递归. 时间复杂度的处理:每层循环取max,然后相加. 最大难点:各种繁杂而令人发指的特判. ...
- 洛谷 P3952时间复杂度 (本地AC测评RE的伪题解)
[题目描述] 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写 ...
- 【题解】洛谷P3952 [NOIP2017TG] 时间复杂度(模拟)
题目来源:洛谷P3952 思路 纯模拟没啥可说的了 果然好复杂 参考了你谷一个40行代码 代码 #include<iostream> #include<cstdio> #inc ...
随机推荐
- 远程服务器上的weblogic项目管理(二)发布完成后如何重启weblogic容器
前面说到了每次更新服务器项目的java文件与配置文件后,需要更新weblogic容器以完成更新加载,下面来说说如何更新weblogic容器: 第一种方法可以通过ssh shell client工具直接 ...
- OCR光学字符识别--STN-OCR 测试
1.同文章中建议的使用ubuntu-python隔离环境,真的很好用 参照:http://blog.topspeedsnail.com/archives/5618启动虚拟环境:source env/b ...
- 【题解】[P4178 Tree]
[题解]P4178 Tree 一道点分治模板好题 不知道是不是我见到的题目太少了,为什么这种题目都是暴力开值域的桶QAQ?? 问点对,考虑点分治吧.直接用值域树状数组开下来,统计的时候直接往树状数组里 ...
- Linux下监视GPU、CPU的使用情况
1.在运行Tensorflow等程序时会使用到NVIDIA的GPU,所以在程序运行时需要监控GPU的运行情况 使用 nvidia-smi 命令 ,显示如下: nvidia-smi 显示解读: GPU: ...
- 使用electron静默打印
1.使用electron打印的理由 很多情况下程序中使用的打印都是用户无感知的.并且想要灵活的控制打印内容,往往需要借助打印机给我们提供的api再进行开发,这种开发方式非常繁琐,并且开发难度较大. e ...
- 编译debian内核
玩腻了开发板,在pc上编译linux内核. debian 官方的内核文档见http://kernel-handbook.alioth.debian.org 我选择编译与当前内核版本对应的linux内核 ...
- Spring Boot2.0之整合log4j
传统方式打印日志比较复杂, 每次打印需要定义全局变量 private static final Logger logger = LoggerFactory.getLogger(SjpControlle ...
- HttpClient_02_实现https协议
二.参考文档 1.Java 和 HTTP 的那些事(四) HTTPS 和 证书 1. 轻松把玩HttpClient之配置ssl,采用设置信任自签名证书实现https 2.如何使用HttpClient来 ...
- PHP 流程控制
流程控制 if, else, elseif $a = 5; $b = 9; if ($a > $b): echo "a is bigger than b"; elseif ( ...
- BZOJ-4819: 新生舞会(01分数规划+费用流)
Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间 ...