# 題目: UVa 12207 - That is Your Queue
# 題目說明
政府終於解決了全民健保問題,而建立了一套系統
你需要用程式寫這個系統,說明如下:
- 每個人被分配到一個編號,由 1 開始排
- 當緊急狀況發生時,會有人優先移到前面
INPUT:
每筆測資第一行有兩個整數 P
和 C
, P
代表國家的人口數, C
代表接下來的指令數
(當 P
與 C
為 0
時結束程式)
接下來會有 C
行,每行會有 N
或 E x
N
代表輸出最前面的人並移動到最後E x
代表將編號為x
的人移動到最前面
OUTPUT:
每遇到 N
,輸出最前面的人
# 解題方法
利用 deque
儲存資料,方便進行 push_back
、 push_front
與 pop_front
注意 push
及 pop
的順序即可
# 參考程式碼
#include <iostream> | |
#include <deque> | |
#include <algorithm> | |
using namespace std; | |
int main() | |
{ | |
ios::sync_with_stdio(false); | |
cin.tie(nullptr); | |
cout.tie(nullptr); | |
int P, C, count = 1; | |
while (cin >> P >> C && P != 0 && C != 0) | |
{ | |
deque<int> line; | |
char state; | |
int s; | |
for (int i = 1; i <= min(P, C); i++) line.emplace_back(i); | |
cout << "Case " << count++ << ":\n"; | |
while (C-- && cin >> state) | |
{ | |
if (state == 'N') | |
{ | |
cout << line.front() << "\n"; | |
line.emplace_back(line.front()); | |
line.pop_front(); | |
} | |
else | |
{ | |
cin >> s; | |
for (auto it = line.begin(); it != line.end(); it++) | |
if (*it == s) | |
{ | |
line.erase(it); | |
break; | |
} | |
line.emplace_front(s); | |
} | |
} | |
} | |
return 0; | |
} |
# 參考資料
https://www.larrysprognotes.com/UVa%20-%2012207/