題目: UVa - 1203 - Argus
題目說明
給一些 Register 的編號及週期,根據題目要求前 K
個被執行的 Register。若有執行相同的 Register 則編號小的優先執行。
解題思路
建造一個 Structure 並 Overload operator< 之後使用 Priority_queue 實作即可,每次 Register 執行後將時間加上週期後重新推入。
參考解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #include <iostream> #include <queue>
using namespace std;
static auto __ = [] { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); return 0; }();
struct reg { int num; int period; int time;
bool operator<(const reg& r) const { return (time > r.time || (time == r.time && num > r.num)); } };
int main() { int num, time; string in; priority_queue<reg> pq;
while (cin >> in && in != "#") { cin >> num >> time; pq.push({ num, time, time }); } cin >> num; for (int i = 0; i < num; ++i) { auto tmp = pq.top(); pq.pop(); cout << tmp.num << '\n'; pq.push({ tmp.num, tmp.period, tmp.time + tmp.period }); } }
|