洛谷 - 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 ...
随机推荐
- 解决Ubuntu(乌班图)vi/vim模式下粘贴的代码内容会多出的空格的问题
vi/vim模式下的粘贴 因为linux系统和win系统的差异性,有时候在win环境运行的python代码会放在Linux系统上执行,这个时候就需要把win系统上IDE上的代码copy下来,在Linu ...
- python cookbook第三版学习笔记六:迭代器与生成器
假如我们有一个列表 items=[1,2,3].我们要遍历这个列表我们会用下面的方式 For i in items: Print i 首先介绍几个概念:容器,可迭代对象,迭代器 容器是一种存储数据 ...
- 一起来学linux:sudo
通常在转换用户的时候会用到su 用户的方式.但是su方式需要知道切换的用户密码.而且su root到roo账户后,root账户有全部的权限.为了防止root账户干错事,因此有了sudo的命令.sudo ...
- POJ3984 迷宫问题【水BFS】
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u011775691/article/details/28050277 #include <cs ...
- 基于欧氏距离和马氏距离的异常点检测—matlab实现
前几天接的一个小项目,基于欧氏距离和马氏距离的异常点检测,已经交接完毕,现在把代码公开. 基于欧式距离的: load data1.txt %导入数据,行为样本,列为特征 X=data1; %赋值给X ...
- 让我们再谈谈 iOS 安全
前言 安全方面的话题总是聊不完的.这不,国外一家有名的专门攻击别人的安全公司 Hacking Team 自己被 Hack 了,结果有 400 多 G 的攻击资料泄漏出来,包括一些 0-day 的漏洞. ...
- bytearray类型
bytearray类型是python中的二进制数组类型,返回一个字节数组. byte=bytearray(str,encoding,error) str:待转化的字符串,若该值为字符串,则encodi ...
- ACM学习历程——HDU5015 233 Matrix(矩阵快速幂)(2014陕西网赛)
Description In our daily life we often use 233 to express our feelings. Actually, we may say 2333, 2 ...
- Mysql常用命令行大全(一)
登录到mysql中,然后在mysql的提示符下运行下列命令,每个命令以分号结束. 1. 显示数据库列表. show databases; 缺省有两个数据库:mysql和test. mysql库存放着m ...
- POJ1511(最短路大数据处理)
Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 23357 Accepted: 767 ...