切換
舊版
前往
大廳
主題

ZeroJudge - e520: 13190 - Rockabye Tobby 解題心得

Not In My Back Yard | 2019-11-10 21:24:11 | 巴幣 0 | 人氣 307

題目連結:


題目大意:
給定一正整數 T (1 ≦ T ≦ 15),代表測試資料的筆數。每筆測試資料的第一列給定兩正整數 n 、 k (1 ≦ n ≦ 3 × 10 ^ 3 , 1 ≦ k ≦ 10 ^ 4),代表醫生開的藥物種類的數量以及 Tobby 需要吃的藥量。

接著的 n 列,每列給定一字串 m 以及一正整數 f (1 ≦ |m| ≦ 15 , 1 ≦ f ≦ 3 × 10 ^ 3),代表一種藥的名稱以及服用的頻率(每經過 f 單位時間,服用該藥物)。

藥物越先給定,代表其優先度越高。因此當有多種藥物在同一時刻可以服用時,應先服用優先度較高的。

請給出 Tobby 服用藥物的時程。



範例輸入:
1
2 5
Acetaminophen 20
Loratadine 30


範例輸出:
20 Acetaminophen
30 Loratadine
40 Acetaminophen
60 Acetaminophen
60 Loratadine


解題思維:
把藥物的名稱(即 m)、服用頻率(即 f)、優先度(即給定順序)、下次的服用時間(一開始即 f ,每次服用後 + f)都存在一個資料結構裡(全部一起包起來的概念)。

接著將藥物放進優先佇列(Priority Queue,通常由堆積(Heap)實作。介紹可看這裡)裡。排序的依據是依照下次的服用時間,服用時間越前面越靠近優先佇列的頂端;如果服用時間一致,則依據藥品的優先度,優先度越高越靠近頂端。

接著就是依序從優先佇列裡取出頂端的元素(藥品),輸出該藥物的服用時間以及名稱。其後,將該服用時間加上其服用頻率 f 後放回優先佇列裡。重複這個過程,直到服用了 k 顆藥物後停止(即輸出 k 列的字串後)。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作