Aggressive cows

Description

Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,…,xN (0 <= xi <= 1,000,000,000).

His C (2 <= C <= N) cows don’t like this barn layout and become aggressive towards each other once put into a stall. To prevent the cows from hurting each other, FJ want to assign the cows to the stalls, such that the minimum distance between any two of them is as large as possible. What is the largest minimum distance?

Input

  • Line 1: Two space-separated integers: N and C

  • Lines 2..N+1: Line i+1 contains an integer stall location, xi

Output

  • Line 1: One integer: the largest minimum distance

Sample Input

5 3
1
2
8
4
9

Sample Output

3

Thinking

C(d):可以安排牛的位置使得最近的兩頭牛的距離不小於d。問題轉化爲求滿足d的最大值。
二分搜索,最大化最小值

#include<cstdio>
#include<algorithm>
using namespace std;

const int maxn = 100000+4;
int N, M;
int x[maxn];

bool CC(int d){
    int last = 0;
    for(int i = 1; i < M; i++){ //!!!!!! index starts with 1
        int crt = last+1;
        while(crt < N && x[crt] - x[last] < d)
            crt++;
        if(crt == N) return false;
        last = crt;
    }
    return true;
}

void solve(){
    sort(x, x+N);

    int lb = 0;
    int ub = 1500000000;
    while(ub - lb > 1){
        int mid = (ub+lb)/2;
        if(CC(mid)) lb = mid;
        else ub = mid;
    }

    printf("%d\n", lb);
}

int main(){
    scanf("%d%d", &N, &M);
    for(int i = 0; i < N; i++)
        scanf("%d", &x[i]);
    solve();
    return 0;
}
發佈了38 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章