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