水王爭霸
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 1sample output13 2
1000000 5
100 100
1source315808
0
尋找發帖「水王」
分析與解法 首先想到的是乙個最直接的方法,我們可以對所有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 且只需要常熟...