# 題目: UVa 1203 - Argus

# 題目說明

我們在 Argus 註冊了很多 Register
你的目標是找到錢 K 個 Register


INPUT:
每行輸入 3 個字串

  1. Register# ,當輸入為 # 結束
  2. Register 的編號
  3. Register 的頻率
    最後有一個整數 K ,代表要輸出幾個 Register

OUTPUT:
輸出 K 個 Register 的編號,如果頻率相同,則編號小的優先輸出

# 解題方法

priority queue 儲存編號及頻率 (升冪排序)
每次找到一個 Register,將它的現在時間加上原本頻率再度 pushpriority 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/

更新於