# 題目: 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;
}