[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 ...
随机推荐
- 谷歌浏览器 加安全地址 快捷方式加参数 chrome
--unsafely-treat-insecure-origin-as-secure="http://192.168.43.17:8080"
- docker单主机网络
当你安装Docker时,它会自动创建三个网络.你可以使用以下docker network ls命令列出这些网络: [root@localhost ~]# docker network ls NETWO ...
- Luogu [P3951] 小凯的疑惑
题目详见:[P3951]小凯的疑惑 首先说明:此题为一道提高组的题.但其实代码并没有提高组的水平.主要考的是我们的推断能力,以及看到题后的分析能力. 分析如下: 证明当k>ab-a-b时,小凯可 ...
- iOS--UIScrollView基本用法和代理方法
主要是为了记录下UIScrollView的代理方法吧 在帮信息学院的学长做东西的时候需要大量用到分块浏览,所以就涉及到很多的关于scrollview,所以也就有了这篇文章 - (void)view ...
- Angular-constructor和ngOnInit区别
参考文档:https://blog.csdn.net/u010730126/article/details/64486997 总结:constructor做依赖注入,避免业务操作: ngOninit做 ...
- 【转】本人常用资源整理(ing...)
Deep Learning(深度学习): ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习):一 ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习) ...
- 共享服务-FTP基础(二)
续接上一篇 使用pam(Pluggable Authentication Modules)完成用户认证 pam_service_name=vsftpd pam配置文件:/etc/pam.d/vsftp ...
- RSA与AES实现数据加密传输
RSA.AES简介 RSA:非对称加密,需要提前生成两个密钥(一对的),通过其中一个密钥加密后的数据,只有另一个密钥能解密.通常这两个密钥中有一个会暴漏出来,即对外公开的,这个密钥称为“公钥”,反之另 ...
- 收集的免费API接口
1.IP地址调用接口 这是淘宝的IP调用API http://ip.taobao.com/service/getIpInfo.php?ip=$ip 返回值:{"code":0,&q ...
- Django小总结
初始Git git init 初始化本地仓库,会在根目录下创建一个.git文件夹 git log 查看提交日志 git status 查看日志 git add 文件名 添加到缓存区 git commi ...