NC13822 Keep In Line
题目
- 原题地址:Keep In Line
- 题目编号:NC13822
- 题目类型:队列
- 时间限制:C/C++ 1秒,其他语言2秒
- 空间限制:C/C++ 262144K,其他语言524288K
1.题目大意
- 交叉给出入队和出队的人,问有多少人没有插队
2.题目分析
- 一个队列存放不插队的序列,一个
map存放该人是否已经离开队伍
3.题目代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while(t--) {
int n;
cin >> n;
queue<string> q;
map<string,int> m;
int cnt = n/2;
string ty, na;
for(int i=0;i<n;i++){
cin >> ty >> na;
if(ty=="in") q.push(na), m[na] = 1;
else {
while(m[q.front()]==0) q.pop();
if(na!=q.front()) cnt--;
m[na] = 0;
}
}
cout << cnt << endl;
}
}

又到饭点了,SK同学靠着惯性走到了食堂,但长长的队伍顿时让他失去了食欲。突然,他注意到某个窗口前的队伍里明显存在插队的现象,于是他默默记录下了同学们进队和出队的变化。
对于进队,SK同学只知道队伍里多了一个人,并不知道新来的人是老老实实站到了队尾还是插到了队伍里的某个位置;对于出队,SK同学能确定是队伍里站在最前面的人出队了。
初始时队伍为空,给出n条队伍进出的信息,保证已经出队的同学不会再入队,并且最终队伍也为空,现在SK同学想知道有多少不插队的好同学。
浙公网安备 33010602011771号