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退出太及时,把剩 ... 
随机推荐
- CSS权重的问题
			important > 内联 > ID > 类 > 标签 | 伪类 | 属性选择 > 伪对象 > 继承 > 通配符 1.行内样式,指的是html文档中定义的s ... 
- PL/SQ连接oracle,L 新建表的时候, virtual那一列是什么意思
			Virtual标示该栏位是否为虚拟列. https://www.2cto.com/database/201306/216917.html 
- ubuntu16.04 eclipse+pydev 配置
			参考:http://blog.csdn.net/bluish_white/article/details/56509446,http://blog.csdn.net/qing101hua/articl ... 
- js原生选择class DOM元素
			document.querySelector(".demo"); querySelector() 方法返回匹配指定选择器的第一个元素.如果需要返回所有的元素,使用 querySel ... 
- Esper复杂事务处理一小时入门
			来自小韩 什么是Esper 想要认识Esper,先要了解CEP(Complex Event Processing),到处都有,并且各方理解也有偏差,我就不赘述了. Esper就是CEP的一个java的 ... 
- Interval Minimum Number
			Given an integer array (index from 0 to n-1, where n is the size of this array), and an query list. ... 
- Jenkins远程调度Shell命令
			http://blog.csdn.net/fireofjava/article/details/40624353 Jenkins服务器为Win7版本,需要远程调用CentOS服务器上Shell脚本,然 ... 
- MySQL参数设置
			InnoDB配置 从MySQL 5.5版本开始,InnoDB就是默认的存储引擎并且它比任何其它存储引擎的使用要多得多.那也是为什么它需要小心配置的原因. 1 innodb_file_per_table ... 
- getattr的使用
			from requests_html import HTMLSession class UrlGenerator(object): def __init__(self, root_url): self ... 
- Go 的package
			一.包的一些基本的概念 1.在同一个目录下的所有go文件中,只能有一个main函数.如果存在多个main函数,则在编译的时候会报错 那么,在同一个目录下的两个go文件究竟是什么关系? 为什么会彼此影响 ... 
