2024/11/19

鱼一直摸發表於2024-11-19

佇列應用(藍橋杯)
分數 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;

}