2018年3月4日

TOJ374 飢餓的Sana

2017校隊初選的PB

連結:TOJ374 飢餓的Sana

題目:

一排食物陳列在前,每個食物各有一個飽食度
一次需抓取一個區段的食物來吃,區段大小可以是1

整個區段的飽食度即為裏頭每個食物的飽食度總和
現在請你找出第K大(非嚴格)的飽食度為多少

做法:

昨天寫了spoj一題,利用TwoPointer找出不超過某數的最大區間連續和
而這題要找的是第K大連續和,而且值都是正數,所以同樣地可以利用這個方法

在O(N)的複雜度算出有幾個區段>某數,也就是找出某數是第幾大的飽食度

那我們只要對這個某數二分搜,逐步縮小範圍,直到某數恰好是第K大為止
再重新算一下不超過某數的最大區間連續和,就是答案了

程式碼中greater_函數回傳某數是否不比第K大還要大(名次>K)
code:

沒有留言:

張貼留言