農夫john建造了一座很長的畜欄,它包括n(2≤n≤100,000)個隔間,這些小隔間的位置為x0,…,xn-1(0≤xi≤1,000,000,000,均為整數,各不相同).
john的c(2≤c≤n)頭牛每頭分到乙個隔間。牛都希望互相離得遠點省得互相打擾。
怎樣才能使任意兩頭牛之間的最小距離盡可能的大,這個最大的最小距離是多少呢?
第1行: 兩個由空格分隔的整數 n,c
第2…n + 1行:第i + 1行包含整數隔間的位置xi。
第1行:乙個整數:最大最小距離
5 312
849
3
中等
首先對畜欄的位置進行排序,isok函式判斷以distance的距離存放是否能裝得下所有的牛,接著是乙個二分查詢的模板searchmaxd,對最大距離d進行二分查詢, 在[left,right]內用二分法查詢「最大最近距離」
left的起始值為0,right的其實值為最後乙個減第乙個(即最大距離)若d可行,則(left= mid+1)在右側繼續查詢,若d不可行,則(right = mid)在左邊查詢。
n =
(int)(
input()
)c =
(int)(
input()
)cow_stall =
for i in
range
(n):
(int)(
input()
))cow_stall.sort(
)def
isok
(distance)
: count =
1 tempstall = cow_stall[0]
for i in
range(1
,n):
if(cow_stall[i]
-tempstall>=distance)
: count +=
1 tempstall = cow_stall[i]
if(count>=c)
:return
true
else
:return
false
defsearchmaxd()
: left =
0 right = cow_stall[-1
]-cow_stall[0]
while
(left: mid =
(int)(
(left+right)/2
)if(isok(mid)):
left = mid+
1else
: right = mid
print
(mid)
searchmaxd(
)
演算法實踐 派 (二分)
林克被造的紀念日快要到了。根據任天堂公司的慣例,每年到這個時間都會一些蛋糕分給林克的朋友。這些蛋糕有不同的口味,比如南瓜蛋糕 堅果蛋糕 西瓜蛋糕 胡蘿蔔蛋糕 水果蛋糕等等 有n種不同口味,大小不同的蛋糕 為了公平,每個朋友都會分到一塊大小相同的蛋糕 不需要同樣形狀,但是要同一種口味,不允許混合口味,...
演算法實踐 704 二分查詢
給定乙個n個元素有序的 公升序 整型陣列nums和乙個目標值target,寫乙個函式搜尋nums中的target,如果目標值存在返回下標,否則返回 1。示例 1 輸入 nums 1,0,3,5,9,12 target 9輸出 4解釋 9 出現在 nums 中並且下標為 4示例 2 輸入 nums 1...
演算法實踐 月度開銷(二分)
農夫約翰是乙個精明的會計師。他意識到自己可能沒有足夠的錢來維持農場的運轉了。他計算出並記錄下了接下來n 1 n 100,000 天裡每天需要的開銷。約翰打算為連續的m 1 m n 個財政週期建立預算案,他把乙個財政週期命名為fajo月。每個fajo月包含一天或連續的多天,每天被恰好包含在乙個fajo...