题目链接


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] 时间复杂度 (模拟,栈)的更多相关文章

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

    原本只是想看下多久能码完时间复杂度 然后在30min内就码完了,然后一A了???? 首先,这题完全可以离线做 我们先把所有的操作读完,判断合不合法之后,再去判断和标准答案的关系 具体而言 把所有的操作 ...

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

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

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

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

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

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

  5. ACM/ICPC 之 用双向链表 or 模拟栈 解“栈混洗”问题-火车调度(TSH OJ - Train)

    本篇用双向链表和模拟栈混洗过程两种解答方式具体解答“栈混洗”的应用问题 有关栈混洗的定义和解释在此篇:手记-栈与队列相关 列车调度(Train) 描述 某列车调度站的铁道联接结构如Figure 1所示 ...

  6. java 16 - 5 LinkedList模拟栈数据结构的集合

    请用LinkedList模拟栈数据结构的集合,并测试 题目的意思是: 你自己的定义一个集合类,在这个集合类内部可以使用LinkedList模拟. package cn_LinkedList; impo ...

  7. hdu 4699 Editor 模拟栈

    思路:刚开始用STL中的栈,一直RE……,之后改为手动模拟栈操作,在注意点细节就可以了!!! 代码如下: #include<cstdio> #include<cstring> ...

  8. 【DataStructure In Python】Python模拟栈和队列

    用Python模拟栈和队列主要是利用List,当然也可以使用collection的deque.以下内容为栈: #! /usr/bin/env python # DataStructure Stack ...

  9. 第一回写的用arraylist模拟栈操作

    package hashMap; import java.util.ArrayList; import d.Student; /** * 用ArrayList模拟栈操作 * @author zhuji ...

随机推荐

  1. hd - MFM/IDE 硬盘设备

    描述 DESCRIPTION hd* 开头的设备是以裸模式(raw mode)访问MFM/IDE类型硬盘的块设备. 第一个IDE驱动控制器上的主盘(主设备号3)是 hda ;从盘是 hdb. 第二个I ...

  2. 单核CPU并发与非并发测试

    多线程运行程序的目的一般是提高程序运行效率并且能够提高硬件的利用率比如多核CPU,但是如果我们只有单核CPU并发运行程序会怎样呢? 我以两个环境作为对比: 环境A(我本机8c) 环境B(我的云服务器1 ...

  3. javaweb基础(22)_Servlet+JSP+JavaBean实战登陆

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  4. 【转】PCA for opencv

    对于PCA,一直都是有个概念,没有实际使用过,今天终于实际使用了一把,发现PCA还是挺神奇的. 在OPENCV中使用PCA非常简单,只要几条语句就可以了. 1.初始化数据 //每一行表示一个样本 Cv ...

  5. Python学习记录4(语句)

    赋值语句 序列解包 条件语句 语句块 布尔变量 条件执行和if语句 条件运算符 循环 while语句 for循环 迭代工具 跳出循环 break continue while truebreak语句 ...

  6. PAT 乙级 1077

    题目 题目地址:PAT 乙级 1077 题解 本题没什么难度,但是要注意细节问题,下面简单来说一下: vector 把输入的学生打分存起来,直接用算法库中的 sort 函数给它们排个序,之后直接剔除首 ...

  7. Helm入门

    前言:Helm是GO语言编写的,是管理kubernetes集群中应用程序包的客户端工具.Helm是类似于centos上的yum工具或Ubuntu上的apt-get工具.对于应用发布者而言,可以通过He ...

  8. Python PyAudio 安装使用

    Python PyAudio安装: Python3.7 无法安装pyaudio pip install pyaudio提示error: Microsoft Visual C++ 14.0 is req ...

  9. Python3 S.join() 个人笔记

    S.join(iterable) S:需要的分隔符 iterable:被分割对象 . 注意括号里必须只能有一个成员,比如 ','.join('a','b') 这种写法是行不通的 实例:'-'.join ...

  10. 【HIHOCODER 1176】 欧拉路·一

    描述 小Hi和小Ho最近在玩一个解密类的游戏,他们需要控制角色在一片原始丛林里面探险,收集道具,并找到最后的宝藏.现在他们控制的角色来到了一个很大的湖边.湖上有N个小岛(编号1..N),以及连接小岛的 ...