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

然后在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. 【译】第六篇 SQL Server代理深入作业步骤工作流

    本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术 ...

  2. 网络流建图(典型)(EK)

    题目链接:https://cn.vjudge.net/contest/68128#problem/B 具体思路: 按照  源点 - > 食物 - > 牛1 - > 牛2 - > ...

  3. 通过BurpSuite和sqlmap配合对dvwa进行sql注入测试和用户名密码暴力破解

    0x1 工具和环境介绍 dvwa:渗透测试环境 BurpSuite:强大的WEB安全测试工具 sqlmap:强大的sql注入工具 以上工具和环境都在kali linux上安装和配置. 0x2 步骤说明 ...

  4. 【连接查询】mySql多表连接查询与union与union all用法

    1.准备两个表 表a: 结构: mysql> desc a; +-------+-------------+------+-----+---------+-------+ | Field | T ...

  5. SQl 跨服务器查询脚本示例

    1.采用OPENDATASOURCE select top 10 *from OPENDATASOURCE('SQLOLEDB','Data Source=IP地址;User ID=连接用户名称;Pa ...

  6. ArcGIS RunTime Sdk +WPF 基础地图显示

    1 简单的地图展示 ArcGISRunTime 的平面地图展示主要依赖MapView这个控件,MapView是地图的容器,Map主要是图层的集合 (注:三维场景的显示主要依赖SceneView这个控件 ...

  7. Oracle11g用户、权限、角色、概要文件管理及审计

    第10章 安全管理 1 用户管理 2 权限管理 3 角色管理    : 4 概要文件管理 5 审计 操作系统:win7    Oracle安装目录:E盘 数据库名字:orcl  密码:123456 先 ...

  8. cobbler 无人值守系统安装

    概述 本文适合centos6 | centos7 系统的安装 执行操作之前:检查系统防火墙,selinux是否关闭,网络链接是否畅通. Cobbler是一个免费开源系统安装部署软件,用于自动化网络安装 ...

  9. github 优秀的开源项目

    https://github.com/wlcaption/AndroidMarket---- 这是手机应用商店,包含应用的下载,用户中心等内容 https://github.com/wlcaption ...

  10. docker stack 部署 mysql 5.6

    =============================================== 2018/7/1_第1次修改                       ccb_warlock === ...