题目链接


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. 实验1 c语言最基本内容

    part 1 验证性内容 总结:经受了数组和结构体的双重折磨后,发现这部分好简单...现在没啥问题了... part  2  补全程序 1.判断奇偶 // 程序功能: // 要求用户从键盘输入一个整数 ...

  2. 在Vue将第三方JS库封装为组件使用

    第三方JS库地址:https://github.com/inorganik/CountUp.js 使用NPM进行安装: npm install --save countup 根据官方回答,CountU ...

  3. Spring中使用事务搭建转账环境 转账操作,

    演示不使用事务出现异常情况 Dao层两个方法lessMoney()和moreMoney() package com.swift; import org.springframework.jdbc.cor ...

  4. CE软件修改器

    下载地址: 链接:https://pan.baidu.com/s/1WQa5epfmLW92xk0XY10pqw 提取码:jt3k 喜欢请点赞

  5. 一些恶搞人的c++程序

    top1: 不停打开的cmd(磁盘操作系统) 代码如下: #include<windows.h> using namespace std; int main() { system(&quo ...

  6. CentOS7练习

    为编译安装的httpd服务,实现service unit文件破解centos7 口令修改默认的启动内核为新编译内核启动时临时禁用SELinux启动时进入emergency模式卸载编译安装的新内核

  7. Windows 10 建立wifi热点

    如果当前是台式机那么需要一个usb的无线网卡,这里要注意如果你是使用台式机并且通过有线的方式上网,但是你的无线网卡适配器不能在禁用状态. 这里首先打开[运行]输入cmd,打开cmd(注意,这里要使用管 ...

  8. centos7无法切换startx

    centos光盘安装后,显示命令行模式,通过startx无法进入图形界面? 解决方法:1.使用yum grouplist查看,根据显示的结果采用不同的界面格式,我用的是 yum groupinstal ...

  9. AES加密、解密工具类

    AES加密.解密工具类代码如下: package com.util; import java.io.IOException; import java.io.UnsupportedEncodingExc ...

  10. linux时区

    1. UTC时区切换到CST 时区# echo "export TZ='Asia/Shanghai'" >> /etc/profile # cat /etc/profi ...