洛谷 - 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 ...
随机推荐
- freetype下载和配置
一 下载编译freetype库 1 下载 地址:http://www.freetype.org/ 得到压缩文件:freetype-2.5.3.tar.gz 2 解压: 直接解压,得到文件夹freety ...
- 基础学习笔记之opencv(6):实现将图片生成视频
基础学习笔记之opencv(6):实现将图片生成视频 在做实验的过程中.难免会读视频中的图片用来处理,相反将处理好的图片又整理输出为一个视频文件也是非经常常使用的. 以下就来讲讲基于opencv的C+ ...
- 利用Linux中的计划任务+PHP网页程序(转)
利用Linux中的计划任务+PHP网页程序,实现对web服务器运行状况的监测[每5分钟监测一次,并邮件提醒]一.我的监测服务器环境:rhel5.5+apache2.2+php5二.功能描述:写一个PH ...
- shell执行lua脚本传参数
#lua test.lua 2 5arg[0]= test.lua arg[1]= 2arg[2]= 5 if arg[1] and arg[1] == "2" then prin ...
- 用c++后缀自动机实现最大公共字符串算法,并封装成Python库
后缀自动机的C++代码转自https://e-maxx.ru/algo/suffix_automata,其余封装为自写. 在C++文件同级目录建立setup.py文件,代码如下: # !/usr/bi ...
- 在linux 中卸载Mysql
一.通用的mysql卸载方式 1.查看系统中是否已经安装了mysql 命令:rpm -qa|grep -i mysql如果有显示msql的安装列表,代表已经安装了. 2.停止mysql服务.删除之前安 ...
- Swift 烧脑体操(二) - 函数的参数
前言 Swift 其实比 Objective-C 复杂很多,相对于出生于上世纪 80 年代的 Objective-C 来说,Swift 融入了大量新特性.这也使得我们学习掌握这门语言变得相对来说更加困 ...
- Quartz时SLF4J错误
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-o ...
- 如何浏览github上所有的公开的项目?
github 上面项目多如牛毛,没有维护的.没有意义的或太过偏门的项目也是数不胜数,所以直接按照字母或者更新顺序浏览实在没什么意义. 有一个做法是去 github 搜 awesome list,比如通 ...
- POJ1113 Wall —— 凸包
题目链接:https://vjudge.net/problem/POJ-1113 Wall Time Limit: 1000MS Memory Limit: 10000K Total Submis ...