# 題目: UVa 1203 - Argus
# 題目說明
我們在 Argus 註冊了很多 Register
你的目標是找到錢 K
個 Register
INPUT:
每行輸入 3 個字串
Register
或#
,當輸入為#
結束- Register 的編號
- Register 的頻率
最後有一個整數K
,代表要輸出幾個 Register
OUTPUT:
輸出 K
個 Register 的編號,如果頻率相同,則編號小的優先輸出
# 解題方法
用 priority queue
儲存編號及頻率 (升冪排序)
每次找到一個 Register,將它的現在時間加上原本頻率再度 push
回 priority queue
# 參考程式碼
#include <iostream> | |
#include <queue> | |
#include <tuple> | |
using namespace std; | |
typedef tuple<int, int, int> datas; | |
int main() | |
{ | |
ios::sync_with_stdio(false); | |
cin.tie(nullptr); | |
cout.tie(nullptr); | |
priority_queue<datas, vector<datas>, greater<datas>> lists; | |
string input; | |
int Q, P, num, ps; | |
while (cin >> input && input != "#" && cin >> Q >> P) lists.emplace(make_tuple(P, Q, P)); | |
cin >> num; | |
while (num--) { | |
tie(ps, Q, P) = lists.top(); | |
lists.pop(); | |
lists.emplace(make_tuple(ps + P, Q, P)); | |
cout << Q << "\n"; | |
} | |
return 0; | |
} |
# 參考資料
https://www.larrysprognotes.com/UVa%20-%201203/