二分演算法C P1824 進擊的奶牛

2021-10-05 05:46:34 字數 1025 閱讀 1237

題目描述

farmer john建造了乙個有n(2<=n<=100,000)個隔間的牛棚,這些隔間分布在一條直線上,座標是x1,…,xn (0<=xi<=1,000,000,000)。

他的c(2<=c<=n)頭牛不滿於隔間的位置分布,它們為牛棚裡其他的牛的存在而憤怒。為了防止牛之間的互相打鬥,farmer john想把這些牛安置在指定的隔間,所有牛中相鄰兩頭的最近距離越大越好。那麼,這個最大的最近距離是多少呢?

輸入格式

第1行:兩個用空格隔開的數字n和c。

第2~n+1行:每行乙個整數,表示每個隔間的座標。

輸出格式

輸出只有一行,即相鄰兩頭牛最大的最近距離。

輸入輸出樣例

輸入 #1 複製

5 3128

49將牛棚的位置輸入進來後,進行排序,並且記錄下最遠的牛棚位置

利用二分法在0到最遠的牛棚之間找合適的距離,就是用迴圈判斷用當前找到的位置能裝下幾個牛,要是裝下的牛大於已有的牛,就是說明現在確定的距離有點小,加大就行了(再二分向右找),反之減小(二分向左找)

上**:

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

#define ll long long

int n,c;

ll num[

1000010];

ll check

(ll mid)

}return sum;

}int

main()

sort

(num,num+n)

; ll l =0;

while

(l<=r)

else r = mid-1;

} cout<}

洛谷 1824 進擊的奶牛 二分

題目鏈結 寫這道題是為了記錄一下二分的模板,這種求最大中的最小比較適合用二分。面對這種最大中的最小,有時候會犯暈,到底是最大還是最小。這裡的關係是 我們二分中的mid是假設的最大值,如果這個mid成立,那說明他一定是比真正的最小的最大值大的,所以我們往小了找,簡而言之,最大是假設的mid的屬性,最小...

P1824 進擊的奶牛 (二分)

像這種求最大最小值,最小最大值得問題都是典型的二分答案題,二分答案的主要難點在於juge 函式,此題下面給出了兩個不同思路的juge函式。要注意的是如何根據所列舉的答案來將隔間分隔,因為求的是最大的最近距離,這個距離要是每一次分隔距離中最短的。接下來分析,假設隔間的座標沒有規定在哪的話,那麼什麼時候...

進擊的奶牛(二分查詢)

farmer john建造了乙個有n 2 n 100,000 個隔間的牛棚,這些隔間分布在一條直線上,座標是x1,xn 0 xi 1,000,000,000 他的c 2 c n 頭牛不滿於隔間的位置分布,它們為牛棚裡其他的牛的存在而憤怒。為了防止牛之間的互相打鬥,farmer john想把這些牛安置...