再写一道大模拟题。

由于是限时写的,相当于考场代码,乱的一批。

题目链接:P3952 时间复杂度


先记几个教训:

  • 字符串形式的数字比较大小老老实实写函数,字典序都搞错几次了
  • 栈空的时候不但pop()会RE,top()访问栈顶也会RE
  • 数字以字符形式读入要考虑位数超过一位

思路:

1.我用的是在线做法。

2.使用结构体存储一个循环体,包括变量名、起始与结束、是否与n有关、是否能够进入(这一点麻烦了,在栈里推入是否与n有关以及是否能够进入就行了)

3.使用一个变量存储当前进入的层数(只记含n的),当压入一个“与n有关”时++,当弹出一个“与n有关”时--,取最大值

4.使用一个bool存储当前循环是否能进入。当弹出一个不能进入的结构体时取消“不能进入”的状态(如果已在“不能进入”的状态,结构体不会被记作“不能进入”)

源码:

//MiserWeyte is now "mzWyt"
#include <bits/stdc++.h>
using namespace std;
int n, tgt, rel, curr = 0, maxx;
bool used[30];
string tar;
bool err, notin;
struct sts{
char tpe, nam;
string sta, end;
bool use, nin;
};
bool le(string a, string b){
if(a=="n" || b=="n" ) return false;
int numa = atoi(a.c_str());
int numb = atoi(b.c_str());
return numa > numb;
}
stack <sts> s;
void init(){
err = false;
memset(used, 0, sizeof(used));
curr = 0;
maxx = 0;
notin = false;
while(s.size()) s.pop();
}
int main(){
int t;
cin >> t;
while(t--){
init();
cin >> n >> tar;
tgt = 0;
if(tar[2] != '1'){
for(int i=0; i<tar.length(); i++){
if(tar[i] >= '0' && tar[i] <= '9'){
tgt *= 10;
tgt += tar[i] - '0';
}
}
}
for(int i=0; i<n; i++){
sts temp;
cin >> temp.tpe;
if(temp.tpe == 'F'){
cin >> temp.nam ;
cin>> temp.sta;
cin>> temp.end;
temp.use = false;
temp.nin = false;
if(used[temp.nam - 'a']){
err = true;
// break;
}
used[temp.nam - 'a'] = true;
if(notin){
s.push(temp);
}
else if(temp.sta == "n" && temp.end == "n") s.push(temp);
else if(temp.sta != "n" && temp.end == "n"){
temp.use = true;
curr ++;
maxx = max(maxx, curr);
s.push(temp);
}
else if((temp.sta == "n" && temp.end != "n") || le(temp.sta, temp.end)){
notin = true;
temp.nin = true;
s.push(temp);
}
else s.push(temp);
}
else{
if(s.empty()){
err = true;
continue;
}
if(s.size() && s.top().use && !s.top().nin) curr --;
// cout << s.top().use;
if(s.size() && s.top().nin) notin = false;
used[s.top().nam - 'a'] = false;
if(s.size()) s.pop(); }
// cout << "curr" << curr << endl;
// if(notin) cout << "NOTIN" << endl;
}
if(s.size()) err = true;
if(err) cout << "ERR\n";
else{
if(maxx == tgt) cout << "Yes\n";
else cout << "No\n";
// cout << curr << endl;
}
}
}

NOIP2017 时间复杂度 大模拟的更多相关文章

  1. 【 P3952】 时间复杂度 大模拟题解

    题目链接 完全模拟 1.模拟结果 当我们的模拟程序执行结束时,直接执行模拟结果函数,用于比对我们的结果和数据给出的结果. bool yes(char a[],char b[]) { ;i<=;+ ...

  2. NOIp2017真题模拟赛 By cellur925

    果然我还是最菜的==不接受反驳 (先考了day2喵喵喵) Day2 T1:奶酪 期望得分:100分 实际得分:100分 考察:并查集 思路:这题其实之前做过了==.思路还是比较清晰的,读入时预处理出可 ...

  3. NOIP2017提高组 模拟赛15(总结)

    NOIP2017提高组 模拟赛15(总结) 第一题 讨厌整除的小明 [题目描述] 小明作为一个数学迷,总会出于数字的一些性质喜欢上某个数字,然而当他喜欢数字k的时候,却十分讨厌那些能够整除k而比k小的 ...

  4. NOIP2017提高组模拟赛 9 (总结)

    NOIP2017提高组模拟赛 9 (总结) 第一题 星星 天空中有N(1≤N≤400)颗星,每颗星有一个唯一的坐标(x,y),(1≤x,y ≤N).请计算可以覆盖至少K(1≤K≤N)颗星的矩形的最小面 ...

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

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

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

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

  7. NOIP2017提高组模拟赛 10 (总结)

    NOIP2017提高组模拟赛 10 (总结) 第一题 机密信息 FJ有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的 ...

  8. NOIP2017提高组模拟赛 8(总结)

    NOIP2017提高组模拟赛 8(总结) 第一题 路径 在二维坐标平面里有N个整数点,Bessie要访问这N个点.刚开始Bessie在点(0,0)处. 每一步,Bessie可以走到上.下.左.右四个点 ...

  9. NOIP2017提高组模拟赛4 (总结)

    NOIP2017提高组模拟赛4 (总结) 第一题 约数 设K是一个正整数,设X是K的约数,且X不等于1也不等于K. 加了X后,K的值就变大了,你可以重复上面的步骤.例如K= 4,我们可以用上面的规则产 ...

随机推荐

  1. Python3学习笔记(十二):闭包

    闭包定义: 在一个外函数中定义了一个内函数,内函数里引用了外函数的临时变量,并且外函数的返回值是内函数的引用.这样就构成了一个闭包. 我们先来看一个简单的函数: def outer(a): b = 1 ...

  2. TensorFlow写的神经网络不work的原因

    for epoch in range(training_steps): with tf.Session() as sess: sess.run(tf.global_variable_initializ ...

  3. windos下hosts文件

    win+R c:\windows\system32\drivers\etc

  4. Vue源码阅读一:说说vue.nextTick实现

    用法: 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 疑惑: 怎么实现的延迟回调 原理: JavaScript语言的一大特点就是单线程,同一个时 ...

  5. 死磕java多线程

    1.线程和进程 1.1线程和进程的区别 进程 它是内存中的一段独立的空间,可以负责当前应用程序的运行.当前这个进程负责调度当前程序中的所有运行细节(操作系统为进程分配一块独立的运行空间): 线程 它是 ...

  6. Docker入门-介绍和安装

    Docker容器 Docker是什么 Docker最初是dotCloud公司创建人Solomon Hykes在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并于 ...

  7. spring的AOP——采用注解完成AOP

    AOP的两种配置方式:XML配置和Aspectj注解方式. 一.项目的目录: 二.文件配置 我们采用的是JDK代理,所以首先将接口和实现类代码附上: public interface UserMana ...

  8. What is the most efficient way to deep clone an object in JavaScript?

    What is the most efficient way to deep clone an object in JavaScript? Reliable cloning using a libra ...

  9. CentOS 6.4 yum快速搭建Zabbix 2.2版本(中文)

    1.安装zabbix官方epel包 rpm -ivh http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2-1.el6. ...

  10. ControlTemplate in WPF —— Window

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x ...