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 tar 解压出错
今天用tar -xzvf php-7.2.3.tar.gz 解压php的tar包时报错 [root@VM_72_37_centos ~]# tar -xzvf php-.tar.gz gzip: st ...
- 【FCS NOI2018】福建省冬摸鱼笔记 day1
省冬的第一天. 带了本子,笔,一本<算法导论>就去了.惊讶于为什么同学不带本子记笔记. 他们说:“都学过了.”,果然这才是巨神吧. 第一天:数论,讲师:zzx 前几页的课件挺水,瞎记了点笔 ...
- Linux信息搜集
## 1.取证工具 - LiME 内存获取工具 - volatility 内存分析工具 ## 2.机器信息收集 #sysinfo 16 # # 查看当前登录用户 who > who.txt # ...
- linux下pip安装无法连接官网
为了安装pwntools等工具,要先安装pip,系统安装好了,却遇到了无法连接到pip官网的报错,找了半天方法最终解决 wget https://bootstrap.pypa.io/get-pip.p ...
- sleep允许休眠, delay不允许
在Linux Driver开发中,经常要用到延迟函数:msleep,mdelay/udelay. 虽然msleep和mdelay都有延迟的作用,但他们是有区别的. 1.)对于模块本身 mdelay是忙 ...
- python基础-类的其他方法
一.isinstance(obj,cls)检查是否obj是类的cls对象 # -*- coding:utf-8 -*- __author__ = 'shisanjun' class Foo(objec ...
- Python_oldboy_自动化运维之路_全栈考试(七)
1. 计算100-300之间所有能被3和7整除的所有数之和 # -*- coding: UTF-8 -*- #blog:http://www.cnblogs.com/linux-chenyang/ c ...
- Focal Loss for Dense Object Detection 论文阅读
何凯明大佬 ICCV 2017 best student paper 作者提出focal loss的出发点也是希望one-stage detector可以达到two-stage detector的准确 ...
- SQL SERVER2008 镜像全攻略
--在非域控环境中创建数据库镜像, 我们必须使用证书来创建数据库镜像. 大致的步骤包括: --在为数据库镜像配置的每个服务器实例上执行下列步骤: --在 master 数据库中,创建数据库主密钥. - ...
- Spark-Streaming总结
文章出处:http://www.cnblogs.com/haozhengfei/p/e353daff460b01a5be13688fe1f8c952.html Spark_总结五 1.Storm 和 ...