NYOJ586 瘋牛(貪心 二分搜尋)

2021-08-14 22:45:55 字數 1062 閱讀 1127

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度:4描述

農夫 john 建造了一座很長的畜欄,它包括n (2 <= n <= 100,000)個隔間,這些小隔間依次編號為x1,...,xn (0 <= xi <= 1,000,000,000).

但是,john的c (2 <= c <= n)頭牛們並不喜歡這種布局,而且幾頭牛放在乙個隔間裡,他們就要發生爭鬥。為了不讓牛互相傷害。john決定自己給牛分配隔間,使任意兩頭牛之間的最小距離盡可能的大,那麼,這個最大的最小距離是什麼呢?

輸入

有多組測試資料,以eof結束。

第一行:空格分隔的兩個整數n和c

第二行——第n+1行:分別指出了xi的位置

輸出每組測試資料輸出乙個整數,滿足題意的最大的最小值,注意換行。

樣例輸入

5 312

849

樣例輸出

3

【分析】貪心+二分搜尋(最小值最大化)

此題模型:給你一條長為n的線段,在此線段中給出m個點,然後在這m個點中選出k個點,讓這k個點之間相鄰兩個點的之間距離的最小值最大。

思路:(貪心思想)先對隔間編號從小到大排序,則距離最小值為0,最大值為兩端的兩頭牛之間的差值;

(二分搜尋思想)假設當前的最小值為x,如果判斷出最小差值為x時可以放下c頭牛,說明當前的x有點小,就先讓x變大再判斷;如果放不下,說明當前的x太大了,就先讓x變小然後再進行判斷。直到求出乙個最大的x就是最終的答案。

#include #include #include using namespace std;

const int maxn=100005;

int n,c;

int x[maxn];

int is_ok(int pos)

} return 0;

}int main()

{ int i;

int left,right,mid;

while(scanf("%d %d",&n,&c)!=eof)

{ for(i=0;i

nyoj 586 瘋牛(二分 貪心)

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 農夫 john 建造了一座很長的畜欄,它包括n 2 n 100,000 個隔間,這些小隔間依次編號為x1,xn 0 xi 1,000,000,000 但是,john的c 2 c n 頭牛們並不喜歡這種布局,而且幾頭牛放在乙個隔間...

NYOJ 586 瘋牛(貪心 二分)

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 農夫 john 建造了一座很長的畜欄,它包括n 2 n 100,000 個隔間,這些小隔間依次編號為x1,xn 0 xi 1,000,000,000 但是,john的c 2 c n 頭牛們並不喜歡這種布局,而且幾頭牛放在乙個隔間...

NYOJ 586 瘋牛 二分

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 農夫 john 建造了一座很長的畜欄,它包括n 2 n 100,000 個隔間,這些小隔間依次編號為x1,xn 0 xi 1,000,000,000 但是,john的c 2 c n 頭牛們並不喜歡這種布局,而且幾頭牛放在乙個隔間...