[NOIP2017] 时间复杂度 (模拟,栈)
题目链接
Solution
用栈进行模拟.
记录一个 \(map\) 来看循环变量有没有用过.
对于每一次入栈都加信息.
出栈直接将 \(top\) 减一下.
反正一堆乱七八糟的东西瞎搞...
注意条件如果循环内均为常数,算作 \(O(1)\).
Code
#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
map<char,bool>v;
int sta[108],top,sum[108];
char k[108];
int cal(string s)
{
if(s=="n")return inf;
int w=0,i=0;
while(s[i]>='0'&&s[i]<='9')
w=w*10+s[i]-'0',i++;
return w;
}
int work(int n)
{
top=0; int flag=0,ans=1;
for(char i='a';i<='z';i++)v[i]=0;
while(n--)
{
char ch,i; string x,y;
cin>>ch; sum[0]=1;
if(ch=='F')
{
cin>>i;
if(v[i])flag=-1; v[i]=1;
cin>>x; cin>>y;
if(flag==-1)continue;
int w,x1=cal(x),y1=cal(y);
if(x1==y1)w=1;
if(x1>y1)w=0;
if(x1<y1)
{
if(x1==inf||y1==inf)
w=2;
else w=1;
}
sta[++top]=w; k[top]=i;
if(w==1)sum[top]=sum[top-1];
if(w==2)sum[top]=sum[top-1]+1;
if(w==0)sum[top]=0;
if(sum[top-1]==0)sum[top]=0;
flag=max(flag,sum[top]);
}
if(ch=='E')
{
if(flag==-1)continue;
v[k[top]]=0;
top--;
}
}
if(flag==0)flag++;
if(top!=0)flag=-1;
return flag-1;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int L,cost=0; string T;
cin>>L>>T;
if(T[2]=='1')cost=0;
else{
int i=0;
while(T[i]>'9'||T[i]<'0')i++;
while(T[i]>='0'&&T[i]<='9'){cost=cost*10+T[i]-'0';i++;}
}
int flag=work(L);
if(flag<0)cout<<"ERR"<<endl;
else
if(flag==cost)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
[NOIP2017] 时间复杂度 (模拟,栈)的更多相关文章
- luoguP3952 [NOIP2017]时间复杂度 模拟
原本只是想看下多久能码完时间复杂度 然后在30min内就码完了,然后一A了???? 首先,这题完全可以离线做 我们先把所有的操作读完,判断合不合法之后,再去判断和标准答案的关系 具体而言 把所有的操作 ...
- [NOIP2017]时间复杂度(模拟)
sscanf读入数字,getline(cin,string)读一整行,其余暴力模拟即可. #include<cstdio> #include<string> #include& ...
- 【比赛】NOIP2017 时间复杂度
恶心的模拟题,考场上犯了一堆错误,多组数据清空没清完.数组开小...民间都是50分,结果CCF90.. 考完后随便改改就过了,还好只少了10分,如果真的是50,我估计会疯掉. 因为考场的时候没写好,所 ...
- [Luogu 3952] NOIP2017 时间复杂度
[Luogu 3952] NOIP2017 时间复杂度 一年的时间说长不长,说短,也不短. 一年之内无数次觉得难得可怕的题目,原来也就模拟这么回事儿. #include <cstdio> ...
- ACM/ICPC 之 用双向链表 or 模拟栈 解“栈混洗”问题-火车调度(TSH OJ - Train)
本篇用双向链表和模拟栈混洗过程两种解答方式具体解答“栈混洗”的应用问题 有关栈混洗的定义和解释在此篇:手记-栈与队列相关 列车调度(Train) 描述 某列车调度站的铁道联接结构如Figure 1所示 ...
- java 16 - 5 LinkedList模拟栈数据结构的集合
请用LinkedList模拟栈数据结构的集合,并测试 题目的意思是: 你自己的定义一个集合类,在这个集合类内部可以使用LinkedList模拟. package cn_LinkedList; impo ...
- hdu 4699 Editor 模拟栈
思路:刚开始用STL中的栈,一直RE……,之后改为手动模拟栈操作,在注意点细节就可以了!!! 代码如下: #include<cstdio> #include<cstring> ...
- 【DataStructure In Python】Python模拟栈和队列
用Python模拟栈和队列主要是利用List,当然也可以使用collection的deque.以下内容为栈: #! /usr/bin/env python # DataStructure Stack ...
- 第一回写的用arraylist模拟栈操作
package hashMap; import java.util.ArrayList; import d.Student; /** * 用ArrayList模拟栈操作 * @author zhuji ...
随机推荐
- _variant_t的使用
我们先看看COM所支持的一些类型的基本类: (微软提供,在comdef.h中定义) 在COM中使用的标准类Class如下所示: _bstr_t:对BSTR类型进行打包,并提供有用的操作和方法: _co ...
- s///|s()()i|/i|/g|\U|\u|\L|\l|\U\l|split|join|匹配到hash|匹配到变量|`date`|$^I
#!/usr/bin/perl -w use strict; use warnings; $_='She is a good girl and likes helping others '; s/sh ...
- c#中的里氏转换和Java中强制类型转换在多态中的应用
在c#中: 注意: 子类并没有继承父类的构造函数,而是会默认调用父类那个无参数的构造函数. 如果一个子类继承了一个父类,那么这个子类除了可以使用自己的成员外,还可以使用从父类那里继承过来的成员.但是父 ...
- cocos2dx观察者模式EventListenerCustom的使用(代替NotificationCenter)
在cocos2dx 3.x版本已经被弃用,改用EventDispatcher代替. 观察者模式是MVC模式的一种,一个model可以对应很多个观察者view,当model收到事件通知时,对应的view ...
- cocos2dx lua 热更新方案的实现
(Upgrade.h) #include <stdio.h> #include "cocos2d.h" #include "framework/utils/U ...
- CentOS 编译安装PHP5.6(7以上也通用)
由于公司有新服务器需要构建一套LNMP平台,且需要编译安装各个部件,所以记录下此文章. 这是安装PHP涉及到的软件包(可以自行决定使用哪个版本): ├── libiconv-1.15.tar.gz ├ ...
- 2-python基础
1.第一个程序 新建一个python文件,然后写上代码,运行即可 print("hello world") 2.变量 变量就是存东西,供后面来用的 变量名只能是 字母.数字或下划线 ...
- token验证机制
最近在vue-cli项目实现登录的过程中用到了token验证,在此总结如下 1. 登录时,客户端通过用户名与密码请求登录 2. 服务端收到请求去验证用户名与密码 3. 验证通过,服务端会签发一个Tok ...
- mysql的字符串连接符
以前用SQL Server 连接字符串是用“+”,现在数据库用mysql,写个累加两个字段值SQL语句居然不支持"+",郁闷了半天在网上查下,才知道mysql里的+是数字相加的操作 ...
- LeetCode(290) Word Pattern
题目 Given a pattern and a string str, find if str follows the same pattern. Here follow means a full ...