原本只是想看下多久能码完时间复杂度

然后在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]时间复杂度 模拟的更多相关文章

  1. [NOIP2017]时间复杂度(模拟)

    sscanf读入数字,getline(cin,string)读一整行,其余暴力模拟即可. #include<cstdio> #include<string> #include& ...

  2. [NOIP2017] 时间复杂度 (模拟,栈)

    题目链接 Solution 用栈进行模拟. 记录一个 \(map\) 来看循环变量有没有用过. 对于每一次入栈都加信息. 出栈直接将 \(top\) 减一下. 反正一堆乱七八糟的东西瞎搞... 注意条 ...

  3. 【比赛】NOIP2017 时间复杂度

    恶心的模拟题,考场上犯了一堆错误,多组数据清空没清完.数组开小...民间都是50分,结果CCF90.. 考完后随便改改就过了,还好只少了10分,如果真的是50,我估计会疯掉. 因为考场的时候没写好,所 ...

  4. [Luogu 3952] NOIP2017 时间复杂度

    [Luogu 3952] NOIP2017 时间复杂度 一年的时间说长不长,说短,也不短. 一年之内无数次觉得难得可怕的题目,原来也就模拟这么回事儿. #include <cstdio> ...

  5. 「NOIP2017」「LuoguP3952」 时间复杂度(模拟,栈

    题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写程序 ...

  6. NOIP2017 时间复杂度 大模拟

    再写一道大模拟题. 由于是限时写的,相当于考场代码,乱的一批. 题目链接:P3952 时间复杂度 先记几个教训: 字符串形式的数字比较大小老老实实写函数,字典序都搞错几次了 栈空的时候不但pop()会 ...

  7. luogu P3952 时间复杂度 模拟

    题目链接 luogu P3952 时间复杂度 题解 直接模拟即可 注意不要直接return 我真是naive ...... 代码 #include<map> #include<sta ...

  8. 【洛谷P3952】[NOIP2017]时间复杂度

    时间复杂度 题目链接 对于 100%的数据:L≤100 . 很明显的模拟题 然而考试时还是爆炸了.. 调了一下午.. 蒟蒻表示不会离线操作.. 直接贴代码: #include<cstdio> ...

  9. 洛谷 - P3952 - 时间复杂度 - 模拟

    https://www.luogu.org/problemnew/show/P3952 这个模拟,注意每次进入循环的时候把新状态全部入栈,退出循环的时候就退栈. 第一次就错在发现ERR退出太及时,把剩 ...

随机推荐

  1. linux服务-ssh

    任务目标:ssh登录,scp上传.下载,ssh秘钥登录, 修改ssh server端的端口为8888然后进行登录和scp测试 使用ssh登陆host1 使用scp下载文件 scp root@192.1 ...

  2. qt中int与string的相互转换

    我经常搞错这个问题,一直以为整形int b可以直接使用函数toString呢! 但是在qtCreator中在整形后面不管怎么按点(可以自动提示)他就是不给我提示,我就纳闷了这样居然不行 百度了之后才知 ...

  3. 使用纯注解与配置类开发springMVC项目,去掉xml配置

    最近拜读了杨开振老师的书,深入浅出springBoot2.x,挖掘了很多以前被忽略的知识, 开发一年多,工作中一直用传统springmvc的开发,基本都还是用的传统的xml配置开发, 看到书里有提到, ...

  4. Office DDE漏洞学习笔记

    1.前言 2017年下半年爆发出来的Office漏洞,一直没有空做笔记记录.在病毒分析中也看到有利用这个漏洞的样本,针对Office系列软件发起的钓鱼攻击和APT攻击一直是安全攻防的热点. 2.off ...

  5. 工作常用shell集合

    <1>日志回滚案例======>[root@localhost test]# cat hbase.sh hbase_rotate_log ()       {    log=$1;  ...

  6. Animate.css 前端动画开发教程

    1.首先下载animate.css文件: 2.打开动画预览地址选择想要的动画,地址:https://daneden.github.io/animate.css/  ,选择好后记住动画的名字在你下载的a ...

  7. gbdt和xgboost api

    class xgboost.XGBRegressor(max_depth=3, learning_rate=0.1, n_estimators=100, silent=True, objective= ...

  8. 【转】shell命令中>/dev/null 2>&1的实现原理

    异步执行 exec("/alidata/server/php/bin/php /nas/wxdoctor/index.php App/Common/WordsPic/user_id/&quo ...

  9. Codeforces 580D Kefa and Dishes(状态压缩DP)

    题目链接:http://codeforces.com/problemset/problem/580/D 题目大意:有n盘菜每个菜都有一个满意度,k个规则,每个规则由x y c组成,表示如果再y之前吃x ...

  10. JAVA复习笔记分布式篇:kafka

    前言:第一次使用消息队列是在实在前年的时候,那时候还不了解kafka,用的是阿里的rocket_mq,当时觉得挺好用的,后来听原阿里的同事说rocket_mq是他们看来kafka的源码后自己开发了一套 ...