NOIP2017 时间复杂度 大模拟

再写一道大模拟题。
由于是限时写的,相当于考场代码,乱的一批。
题目链接: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 时间复杂度 大模拟的更多相关文章
- 【 P3952】 时间复杂度 大模拟题解
题目链接 完全模拟 1.模拟结果 当我们的模拟程序执行结束时,直接执行模拟结果函数,用于比对我们的结果和数据给出的结果. bool yes(char a[],char b[]) { ;i<=;+ ...
- NOIp2017真题模拟赛 By cellur925
果然我还是最菜的==不接受反驳 (先考了day2喵喵喵) Day2 T1:奶酪 期望得分:100分 实际得分:100分 考察:并查集 思路:这题其实之前做过了==.思路还是比较清晰的,读入时预处理出可 ...
- NOIP2017提高组 模拟赛15(总结)
NOIP2017提高组 模拟赛15(总结) 第一题 讨厌整除的小明 [题目描述] 小明作为一个数学迷,总会出于数字的一些性质喜欢上某个数字,然而当他喜欢数字k的时候,却十分讨厌那些能够整除k而比k小的 ...
- NOIP2017提高组模拟赛 9 (总结)
NOIP2017提高组模拟赛 9 (总结) 第一题 星星 天空中有N(1≤N≤400)颗星,每颗星有一个唯一的坐标(x,y),(1≤x,y ≤N).请计算可以覆盖至少K(1≤K≤N)颗星的矩形的最小面 ...
- 【比赛】NOIP2017 时间复杂度
恶心的模拟题,考场上犯了一堆错误,多组数据清空没清完.数组开小...民间都是50分,结果CCF90.. 考完后随便改改就过了,还好只少了10分,如果真的是50,我估计会疯掉. 因为考场的时候没写好,所 ...
- [Luogu 3952] NOIP2017 时间复杂度
[Luogu 3952] NOIP2017 时间复杂度 一年的时间说长不长,说短,也不短. 一年之内无数次觉得难得可怕的题目,原来也就模拟这么回事儿. #include <cstdio> ...
- NOIP2017提高组模拟赛 10 (总结)
NOIP2017提高组模拟赛 10 (总结) 第一题 机密信息 FJ有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的 ...
- NOIP2017提高组模拟赛 8(总结)
NOIP2017提高组模拟赛 8(总结) 第一题 路径 在二维坐标平面里有N个整数点,Bessie要访问这N个点.刚开始Bessie在点(0,0)处. 每一步,Bessie可以走到上.下.左.右四个点 ...
- NOIP2017提高组模拟赛4 (总结)
NOIP2017提高组模拟赛4 (总结) 第一题 约数 设K是一个正整数,设X是K的约数,且X不等于1也不等于K. 加了X后,K的值就变大了,你可以重复上面的步骤.例如K= 4,我们可以用上面的规则产 ...
随机推荐
- spring 手动注册bean
//将applicationContext转换为ConfigurableApplicationContext ConfigurableApplicationContext configurableAp ...
- Oracle 递归查询 (start with ...connect by ...prior)
1.connect by 是结构化查询中用到的,其基本语法是:select … from tablename start with 条件1connect by 条件2where 条件3;例:selec ...
- python第一个程序:计算体脂率
主要是为了提醒自己要——保重 height = input('请输入身高(m):') weight = input('请输入体重(KG):') age = input('请输入年龄:') sex = ...
- 浅谈Manacher算法
Manacher manacher是一种\(O(n)\)求最长回文子串的算法,俗称马拉车(滑稽) 直接步入正题 首先可以知道的是:每一个回文串都有自己的对称中心,相应的也有自己的最大延伸长度(可以称之 ...
- vue项目如何部署到Tomcat中
vue项目如何部署到Tomcat中 1,假设你要访问的项目名称为'hms' 2,在Tomcat的webapps下创建hms文件夹, 3,配置config/index.js文件,build: {} 选项 ...
- 转载 Golang []byte与string转换的一个误区
Golang []byte与string转换的一个误区 https://www.oyohyee.com/post/Note/golang_byte_to_string/ 2019-08-10 23:4 ...
- java 设计模式 单例模式之饿汉模式/懒汉模式 singleton pattern
https://v.qq.com/x/page/e0364ung5zp.html 讲的不错, 关于 饿汉式单例模式 code Student 类: package com.test;//单例模式之 ...
- python-静态方法和类方法及其使用场景
静态方法和类方法 静态方法 我们在类中定义的方法都是对象方法,也就是说这些方法都是发送给对象的消息.实际上,我们写在类中的方法并不需要都是对象方法,例如我们定义一个"三角形"类,通 ...
- Amphorae 与 Octavia Worker 的安全通信实现
前言 在前面的章节中我们记录了 LoadBalancer.Listener.Pool.Member 等等 Octavia 核心资源对象的创建流程,本篇我们在此之上继续讨论处于 LB Managemen ...
- 阶段3 2.Spring_09.JdbcTemplate的基本使用_3 JdbcTemplate在Dao中的使用
实际的开发过程中都是基于dao的 创建持久层dao 定义三个方法 持久层实现类 创建dao的实现类. 添加未实现的方法 通过spring注入 jdbcTemplate.所以这里生成一个jdbcTemp ...