luoguP3952 [NOIP2017]时间复杂度 模拟
原本只是想看下多久能码完时间复杂度
然后在30min内就码完了,然后一A了????
首先,这题完全可以离线做
我们先把所有的操作读完,判断合不合法之后,再去判断和标准答案的关系
具体而言
把所有的操作读完之后
对于$F$操作,我们存下这个操作对应的$E$操作,循环范围$[L, R]$以及循环变量
对于$E$操作,我们存下这个操作对应的循环变量
我们记$F$操作对应的$E$操作为$match[i]$
我们可以从左往右对于每一个$E$操作暴力寻找其对应的$F$操作
然后判断一下合不合法,十分好写
之后只要得出正确答案就行了
这也十分好办,定义$Solve(i)$表示以$i$为开端的循环体的循环层数
如果$p$也是一个$F$操作,那么我们用$Solve(p)$更新$Solve(i)$后,令$p = match[p] + 1$
直到$p = match[i]$为止
更新的法则分四类讨论
然后剩下地看代码吧
关于输入
重载一个输入就可以了...
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; #define debug printf("passing %d Lines\n", __LINE__); #define gc getchar
inline int read() {
int p = , w = ; char c = gc();
while(c > '' || c < '') {
if(c == '-') w = -;
if(c == 'n') return ;
c = gc();
}
while(c >= '' && c <= '') p = p * + c - '', c = gc();
return p * w;
} const int sid = ; char s[sid];
bool ex[sid], use[sid];
int top, st[sid], mat[sid];
int L[sid], R[sid], let[sid]; int Solve(int o) {
int ret = ;
int i = o + ;
while(i != mat[o]) {
if(L[i] <= && R[i] <= && L[i] <= R[i]) ret = max(ret, Solve(i));
if(L[i] <= && R[i] > ) ret = max(ret, Solve(i) + );
if(L[i] > && R[i] > ) ret = max(ret, Solve(i));
i = mat[i] + ;
}
return ret;
} int main() {
int t = read();
while(t --) { memset(ex, , sizeof(ex));
memset(use, , sizeof(use));
memset(mat, , sizeof(mat)); int T = read(), E = read();
if(E > ) E = read();
else E = ; top = ; st[] = ;
while(T --) {
int x, y;
scanf("%s", s + );
if(s[] == 'F') {
scanf("%s", s + );
int x = read(), y = read();
st[++ top] = ; L[top] = x;
R[top] = y; let[top] = s[];
}
else st[++ top] = ;
}
st[++ top] = ; bool RE = ;
for(int i = ; i <= top; i ++)
if(st[i] == ) {
int pos = -;
for(int j = i; ~j; j --)
if(st[j] == && !use[j]) { pos = j; break; }
if(pos == -) { RE = ; continue; }
mat[i] = pos; mat[pos] = i;
let[i] = let[pos]; use[pos] = ;
} for(int i = ; i <= top; i ++)
if(i != top && !mat[i]) RE = ; for(int i = ; i <= top; i ++) {
if(st[i] == ) {
if(ex[let[i]]) RE = ;
ex[let[i]] = ;
}
else ex[let[i]] = ;
} if(RE) {
printf("ERR\n");
continue;
} int V = Solve();
if(V != E) printf("No\n");
else printf("Yes\n"); }
return ;
}
luoguP3952 [NOIP2017]时间复杂度 模拟的更多相关文章
- [NOIP2017]时间复杂度(模拟)
sscanf读入数字,getline(cin,string)读一整行,其余暴力模拟即可. #include<cstdio> #include<string> #include& ...
- [NOIP2017] 时间复杂度 (模拟,栈)
题目链接 Solution 用栈进行模拟. 记录一个 \(map\) 来看循环变量有没有用过. 对于每一次入栈都加信息. 出栈直接将 \(top\) 减一下. 反正一堆乱七八糟的东西瞎搞... 注意条 ...
- 【比赛】NOIP2017 时间复杂度
恶心的模拟题,考场上犯了一堆错误,多组数据清空没清完.数组开小...民间都是50分,结果CCF90.. 考完后随便改改就过了,还好只少了10分,如果真的是50,我估计会疯掉. 因为考场的时候没写好,所 ...
- [Luogu 3952] NOIP2017 时间复杂度
[Luogu 3952] NOIP2017 时间复杂度 一年的时间说长不长,说短,也不短. 一年之内无数次觉得难得可怕的题目,原来也就模拟这么回事儿. #include <cstdio> ...
- 「NOIP2017」「LuoguP3952」 时间复杂度(模拟,栈
题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写程序 ...
- NOIP2017 时间复杂度 大模拟
再写一道大模拟题. 由于是限时写的,相当于考场代码,乱的一批. 题目链接:P3952 时间复杂度 先记几个教训: 字符串形式的数字比较大小老老实实写函数,字典序都搞错几次了 栈空的时候不但pop()会 ...
- luogu P3952 时间复杂度 模拟
题目链接 luogu P3952 时间复杂度 题解 直接模拟即可 注意不要直接return 我真是naive ...... 代码 #include<map> #include<sta ...
- 【洛谷P3952】[NOIP2017]时间复杂度
时间复杂度 题目链接 对于 100%的数据:L≤100 . 很明显的模拟题 然而考试时还是爆炸了.. 调了一下午.. 蒟蒻表示不会离线操作.. 直接贴代码: #include<cstdio> ...
- 洛谷 - P3952 - 时间复杂度 - 模拟
https://www.luogu.org/problemnew/show/P3952 这个模拟,注意每次进入循环的时候把新状态全部入栈,退出循环的时候就退栈. 第一次就错在发现ERR退出太及时,把剩 ...
随机推荐
- linux服务-ssh
任务目标:ssh登录,scp上传.下载,ssh秘钥登录, 修改ssh server端的端口为8888然后进行登录和scp测试 使用ssh登陆host1 使用scp下载文件 scp root@192.1 ...
- qt中int与string的相互转换
我经常搞错这个问题,一直以为整形int b可以直接使用函数toString呢! 但是在qtCreator中在整形后面不管怎么按点(可以自动提示)他就是不给我提示,我就纳闷了这样居然不行 百度了之后才知 ...
- 使用纯注解与配置类开发springMVC项目,去掉xml配置
最近拜读了杨开振老师的书,深入浅出springBoot2.x,挖掘了很多以前被忽略的知识, 开发一年多,工作中一直用传统springmvc的开发,基本都还是用的传统的xml配置开发, 看到书里有提到, ...
- Office DDE漏洞学习笔记
1.前言 2017年下半年爆发出来的Office漏洞,一直没有空做笔记记录.在病毒分析中也看到有利用这个漏洞的样本,针对Office系列软件发起的钓鱼攻击和APT攻击一直是安全攻防的热点. 2.off ...
- 工作常用shell集合
<1>日志回滚案例======>[root@localhost test]# cat hbase.sh hbase_rotate_log () { log=$1; ...
- Animate.css 前端动画开发教程
1.首先下载animate.css文件: 2.打开动画预览地址选择想要的动画,地址:https://daneden.github.io/animate.css/ ,选择好后记住动画的名字在你下载的a ...
- gbdt和xgboost api
class xgboost.XGBRegressor(max_depth=3, learning_rate=0.1, n_estimators=100, silent=True, objective= ...
- 【转】shell命令中>/dev/null 2>&1的实现原理
异步执行 exec("/alidata/server/php/bin/php /nas/wxdoctor/index.php App/Common/WordsPic/user_id/&quo ...
- Codeforces 580D Kefa and Dishes(状态压缩DP)
题目链接:http://codeforces.com/problemset/problem/580/D 题目大意:有n盘菜每个菜都有一个满意度,k个规则,每个规则由x y c组成,表示如果再y之前吃x ...
- JAVA复习笔记分布式篇:kafka
前言:第一次使用消息队列是在实在前年的时候,那时候还不了解kafka,用的是阿里的rocket_mq,当时觉得挺好用的,后来听原阿里的同事说rocket_mq是他们看来kafka的源码后自己开发了一套 ...