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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章