Aggressive cows(二分模板)

題目:
農夫約翰搭了一間有 N 間牛舍的小屋。牛舍排在一條線上,第 i 號牛舍在 Xi 的位置。但是他的 M 頭牛對小屋很不高興,因此經常互相攻擊。約翰爲了防止牛之間互相傷害,因此決定把每頭牛都放在離其他牛儘可能遠的牛舍。也就是要最大化最近的兩頭牛之間的距離。

輸入:
輸入第一行: 兩個正整數 N 和 M 。
接下來 N 行,每行一個整數 Xi 。

輸出:
一個整數,即最近的兩頭牛之間的最大距離。

EG:
in:
5 3
1
2
8
4
9

out:
3

數據範圍:
2≤ N ≤ 100000
2≤ M ≤ N
0≤ Xi ≤ 109

樣例說明:
在位置 1,4,9 的牛舍中放入三頭牛,得到最長距離 3 。


代碼:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cctype>
#include<ctime>
#include<cmath>
#include<cstring>
#include<queue>
using namespace std;

int n,m,x[10005];

inline bool jiancha(int a)
{
    int cow=1,rr=x[1]+a;

    for(int i=2;i<=n;++i)
    {
        if(rr>x[i]) continue;

        ++cow;
        rr=x[i]+a;
    }

    return cow>=m;
}

int main()
{
    int l=0;

    cin>>n>>m;

    for(int i=1;i<=n;++i)
        cin>>x[i];

    sort(x+1,x+n+1);

    int r=x[n]-x[1];

    while(r>=l)
    {
        int mid=(l+r)/2;

        if(jiancha(mid))
            l=mid+1;
        else
            r=mid-1;
    }

    cout<<r;

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章