题目描述
CLZ 银行只有两个接待窗口,VIP窗口和普通窗口,VIP 用户进入 VIP 窗口排队,剩下的进入普通窗口排队。现有 M次操作,操作有四种类型,如下:
IN name V
:表示一名叫name
的用户到 VIPVIP 窗口排队OUT V
:表示 VIPVIP 窗口队头的用户离开排队IN name N
:表示一名叫name
的用户到普通窗口排队OUT N
:表示普通窗口队头的用户离开排队
求 M次操作结束后 VIP 窗口队列和普通窗口队列中的姓名。
输入描述
第一行是一个整数 M(1≤M≤1000),表示一共有 M次操作。
第二行到第 M+1行输入操作,格式如下:
IN name V
OUT V
IN name N
OUT N
输出描述
输出 M次操作后 VIP窗口队列和普通窗口队列中的姓名(从头到尾),先输出 VIP 窗口队列后输出普通窗口队列。
输入输出样例
示例 1
输入
5
IN xiaoming N
IN Adel V
IN laozhao N
OUT N
IN CLZ V
输出
Adel
CLZ
laozhao
这道题可以直接用C++的queue容器,然后注意下几个点:queue容器没有迭代器,更不支持随机访问,然后pop()是移除并没有返回值,要返回值的用front()或back();然后其他的就比较容易了
我的做法如下:
#include <iostream>
#include <queue>
using namespace std;
#include <string>
//定义两个队列
queue<string> V,N;
int main()
{
// 请在此输入您的代码
int M;
string flag,name; //flag判断是进还是出
char type; //type判断是vip客户否
cin >> M;
//做M次操作
for(int i=1;i<=M;i++)
{
cin >> flag;
if(flag=="IN")
{
cin >> name >> type;
if(type=='N')
{
N.push(name);
}else if(type=='V')
{
V.push(name);
}
}else if(flag=="OUT") //这里注意当为out时下面输入只用type而不用name
{
cin >> type;
if(type=='N')
{
N.pop();
}else if(type=='V')
{
V.pop();
}
}
}
//注意 队列不提供迭代器,更不支持随机访问
while(!V.empty())
{
cout << V.front() <<endl;
V.pop();
}
while(!N.empty())
{
cout << N.front() <<endl;
N.pop();
}
return 0;
}