1225 水王爭霸

2021-07-05 03:33:15 字數 980 閱讀 4469

水王爭霸

time limit:1000ms  memory limit:65536k

total submit:2 accepted:0

description

為了豐富校園網路生活,學校 bbs 舉行了一次水王爭霸賽。比賽開始後,選手們瘋狂灌水,都想爭取到水王這個榮譽稱號。但學校的 bbs 是如此的不堪一擊,才 1e-3 秒就超負荷了。

現在需要把選手們灌的水集合起來,降低伺服器負荷。

事情是這樣得到處理的:

假設每個選手每次灌水量為1l,每灌一次水,伺服器就用乙個容量為無限的虛擬容器收集這1l水。

最後伺服器中有n個容器收集了水。而伺服器最多能負載k個裝了水的容器。但是,伺服器只有一種自救措施:就是把兩個裝了同樣多水的容器合併到這兩個容易中的其中乙個,另乙個空了的直接free它。

然而不能排除這種情況的存在:通過自救方式,僅由選手們灌好的n容器水不能恰恰好收集成不超過k個非空容器來裝。比如,n=3,k=1的時候,無論如何收集,都只能得到容量分別為1l和2l的兩個非空容器,不可能得到符合要求的1個非空容器。幸運的是,伺服器還有一點點空間,允許你再灌若干次水,使得 bbs 恢復正常。拯救伺服器中的虛擬世界這個艱鉅而光榮的任務就落到你身上了。

input

有1000組輸入資料,每組輸入資料一行,包含兩個正整數n、k,其中n不超過10,000,000,k不超過1,000。

output

輸出最少需要繼續灌水的次數,如果不可能拯救伺服器,輸出-1。

sample input

3 1

13 2

1000000 5

100 100

sample output

1

315808

0

source

尋找發帖「水王」

分析與解法 首先想到的是乙個最直接的方法,我們可以對所有id進行排序。然後再掃瞄一遍排好序的id列表,統計各個id出現的次數。如果某個id出現的次數超過總數的一半,那麼就輸出這個id。這個演算法的時間複雜度為o n log2 n n 如果id列表已經是有序的,還需要掃瞄一遍整個列表來統計各個id出現...

尋找發帖水王

首先想到的是乙個最直接的方法,我們可以對所有id進行排序。然後再掃瞄一遍排好序的id列表,統計各個id出現的次數。如果某個id出現的次數超過總數的一半,那麼就輸出這個id。這個演算法的時間複雜度為o n log2 n n 如果id列表已經是有序的,還需要掃瞄一遍整個列表來統計各個id出現的次數嗎?如...

尋找發帖「水王」

題目 解法1 對所有id排序,因為該id出現的次數超過總數的一半,對有序的序列,第n 2項即為所求id。解法2 每次刪除兩個不同的id,那麼剩下的id列表中,水王 的id次數仍然超過總數的一半。可以通過不斷重複這個過程,把id列表中的id總數降低,從而得到答案。總的時間複雜度只有o n 且只需要常熟...