Aggressive cows(二分模板)

来源:互联网 发布:倒向随机微分方程知乎 编辑:程序博客网 时间:2024/06/05 17:49

题目:
农夫约翰搭了一间有 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;}
0 0