佇列應用(藍橋杯)
分數 10
作者 liudan
單位 石家莊鐵道大學
CLZ 銀行只有兩個接待視窗,VIP 視窗和普通視窗,VIP 使用者進入 VIP 視窗排隊,剩下的進入普通視窗排隊。現有 M 次操作,操作有四種型別,如下:
IN name V:表示一名叫 name 的使用者到 VIP 視窗排隊
OUT V:表示 VIP 視窗隊頭的使用者離開排隊
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 視窗佇列後輸出普通視窗佇列。
輸入樣例:
在這裡給出一組輸入。例如:
5
IN xiaoming N
IN Adel V
IN laozhao N
OUT N
IN CLZ V
輸出樣例:
在這裡給出相應的輸出。例如:
Adel
CLZ
laozhao
include
include
include
using namespace std;
int main() {
int M;
cin >> M;
queue<string> vipQueue;
queue<string> normalQueue;
for (int i = 0; i < M; ++i) {
string operation, name;
cin >> operation;
if (operation == "IN") {
cin >> name;
string windowType;
cin >> windowType;
if (windowType == "V") {
vipQueue.push(name);
} else if (windowType == "N") {
normalQueue.push(name);
}
} else if (operation == "OUT") {
string windowType;
cin >> windowType;
if (windowType == "V") {
if (!vipQueue.empty()) {
vipQueue.pop();
}
} else if (windowType == "N") {
if (!normalQueue.empty()) {
normalQueue.pop();
}
}
}
}
// 輸出VIP視窗佇列
while (!vipQueue.empty()) {
cout << vipQueue.front() << endl;
vipQueue.pop();
}
// 輸出普通視窗佇列
while (!normalQueue.empty()) {
cout << normalQueue.front() << endl;
normalQueue.pop();
}
return 0;
}