1. 程式人生 > >每日一題(01.13)

每日一題(01.13)

Description:

小明有N個牛棚和C頭牛。這些牛都很暴躁,一旦距離很近就會互相毆打。現在給你這N個牛棚的位置,請你找到一個安放牛的方式使得兩頭牛之間的最小距離最大。

Input:

第一行兩個數N和C(2<=N<=100000,2<=C<=N),第二行N個數,分別表示N個牛棚的座標。

Output:

兩頭牛之間最小距離的最大值。

Sample Input:

5 3
1 2 8 4 9

Sample Output:

3

Reference Code:

#include <cstdio>
#include <algorithm>
using namespace std; int x[100000+10]; int n,c; int check(int d){ int pre=0,count=1; for (int i=0;i<n;i++){ if (x[i]-x[pre]>=d){ pre=i; count++; } } if (count<c) return 0; else return 1; } int bsrch(int low,int high){ int mid; while (low<high){ mid=(low+high)/2; if (check(mid)
) low=mid+1; else high=mid; } return high-1; } int main(){ scanf("%d%d",&n,&c); for (int i=0;i<n;i++) scanf("%d",&x[i]); sort(x,x+n); int ans=bsrch(1,x[n-1]-x[0]); printf("%d\n",ans); }