題目連結(jié):
題目大意:
輸入第一列給定四正整數(shù) T1 、 T2 、 K 、 P (1 ≦ T1 < T2 ≦ 10000 , K ≠ 0 , 1 ≦ P ≦ 100),代表船老闆營(yíng)業(yè)時(shí)間為 T1(含)~ T2(含),從 T1 開(kāi)第一班後每班船隔 K 單位時(shí)間才開(kāi)下一班,每班最多載 P 位乘客。
接著有若干列(≦ 100000 列)輸入,每列給定兩整數(shù) t 、 m ,代表該名乘客的抵達(dá)時(shí)間以及給的小費(fèi)金額。對(duì)於每班船而言,給越多小費(fèi)的乘客越先上船。
試問(wèn),總共載了多少位客人又賺取了多少的小費(fèi)?
範(fàn)例輸入:
2 5 2 2
1 10
2 3
2 8
2 5
4 30
3 5
3 20
7 40
3 10
5 15
範(fàn)例輸出:
4 68
解題思維:
先把所有乘客的抵達(dá)時(shí)間以及小費(fèi)金額存起來(lái),然後將所有乘客按照抵達(dá)時(shí)間由小到大排序。
接著宣告一個(gè)優(yōu)先佇列 G(Priority Queue) 用以存取小費(fèi)金額最大的乘客並令一變數(shù) T = T1。
然後將所有抵達(dá)時(shí)間 ≦ T 的乘客之小費(fèi)金額都丟進(jìn) G 裡(因?yàn)閯倓傆信判颍院芊奖悖又鴱?G 之中抓取 P 位乘客(如果不夠 P 位,就全數(shù)抓出即可),而這幾位即是小費(fèi)給最多的前幾位乘客,因此讓他們搭上時(shí)間 T 開(kāi)的這班船。
然後將 T 加上 K 然後重複上面的步驟直到 T > T2。過(guò)程中每一班所載乘客數(shù)、小費(fèi)金額全部加總即是所求。
此次分享到此為止,如有任何更加簡(jiǎn)潔的想法或是有說(shuō)明不清楚之地方,也煩請(qǐng)各位大大撥冗討論。