博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
北京师范大学第十五届ACM决赛-重现赛K Keep In Line ( 字符串模拟实现)
阅读量:4984 次
发布时间:2019-06-12

本文共 2280 字,大约阅读时间需要 7 分钟。

链接:

来源:牛客网

Keep In Line

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
又到饭点了,SK同学靠着惯性走到了食堂,但长长的队伍顿时让他失去了食欲。突然,他注意到某个窗口前的队伍里明显存在插队的现象,于是他默默记录下了同学们进队和出队的变化。
对于进队,SK同学只知道队伍里多了一个人,并不知道新来的人是老老实实站到了队尾还是插到了队伍里的某个位置;对于出队,SK同学能确定是队伍里站在最前面的人出队了。
初始时队伍为空,给出n条队伍进出的信息,保证已经出队的同学不会再入队,并且最终队伍也为空,现在SK同学想知道有多少不插队的好同学。
输入描述:
第一行是一个正整数T(≤ 5),表示测试数据的组数, 对于每组测试数据, 第一行是一个整数n(1≤ n ≤ 100000),表示这个队伍进出的信息数, 接下来n行,每行是两个字符串Opt Name,其中Opt为"in"代表进队,"out"代表出队,Name为进队或出队的人的名字, 所有信息按照时间顺序给出,名字由英文字母和阿拉伯数字组成,长度不超过10,保证每个人的名字各不相同。
输出描述:
对于每组测试数据,输出一行,包含一个整数,表示不插队的人数。
示例1
输入
复制
1
6
in quailty
in hwq1352249
out hwq1352249
in zhuaiballl
out quailty
out zhuaiballl
输出
复制
2

题意:

思路:
首先用map<string,int> 把字符串转成编号,然后数组vis 来表示 编号i的人是否已经出队,然后再用一个变量 Num 维护当前期待出队的人id,期待的即如果他出队,就是满足不插队的,而在这之间出来的如果不是期待的id,那么那个人就是插队的。并且插队的标记为已经出队,num应该根据vis数组更新。

细节见代码:

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ALL(x) (x).begin(), (x).end()#define rt return#define sz(a) int(a.size())#define all(a) a.begin(), a.end()#define rep(i,x,n) for(int i=x;i
#define pll pair
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#define MS0(X) memset((X), 0, sizeof((X)))#define MSC0(X) memset((X), '\0', sizeof((X)))#define pb push_back#define mp make_pair#define fi first#define se second#define eps 1e-6#define gg(x) getInt(&x)#define db(x) cout<<"== [ "<
<<" ] =="<
m;int vis[maxn/10+8];int main(){ // freopen("D:\\code\\text\\input.txt","r",stdin); //freopen("D:\\code\\text\\output.txt","w",stdout);// 1// 6// in quailty 1// in hwq1352249 2// out hwq1352249 1// in zhuaiballl 3// out quailty 2// out zhuaiballl 3 gbtb; int t; cin>>t; while(t--) { MS0(vis); int n; m.clear(); cin>>n; string opt,name; int id=1; int fid=1; int ans=0; int num=1; repd(i,1,n) { cin>>opt>>name; if(opt[0]=='i') { m[name]=id++; }else { fid=m[name]; if(num==fid) { ans++; num++; vis[fid]=1; }else { vis[fid]=1; } while(vis[num]) { num++; } } } cout<
<
= '0' && ch <= '9') { *p = *p * 10 - ch + '0'; } } else { *p = ch - '0'; while ((ch = getchar()) >= '0' && ch <= '9') { *p = *p * 10 + ch - '0'; } }}

转载于:https://www.cnblogs.com/qieqiemin/p/11019269.html

你可能感兴趣的文章
dedecms /member/flink_main.php SQL Injection Vul
查看>>
nginx + vsftpd 搭建 图片服务器
查看>>
C++语言 无法通过Esc键关闭窗体
查看>>
头文件
查看>>
重置VS2010可编辑只读文件的选项
查看>>
Hadoop之MapReduce学习笔记(一)
查看>>
python学习手册笔记——33.异常编码细节
查看>>
9.1 计算机网络基础知识
查看>>
如何将DevExpress的Gridcontrol导出到Excel
查看>>
连接字符串放到配置文件中(10)
查看>>
[整理]android中几种常见的尺寸
查看>>
方法区
查看>>
Django-----ORM
查看>>
Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)...
查看>>
ARCGIS部分刷新
查看>>
发 零 食
查看>>
poj3613:Cow Relays(倍增优化+矩阵乘法floyd+快速幂)
查看>>
1029: [JSOI2007]建筑抢修
查看>>
网络流专题
查看>>
RxJava
查看>>