POJ2456 Aggressive cows(二分+贪心)

来源:互联网 发布:c语言char怎么赋值 编辑:程序博客网 时间:2024/05/17 23:55

假设C(d)为满足所有牛之间的距离都不小于d。先对牛舍的位置排序,然后二分枚举d,寻找满足条件的d。

#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<queue>#include<set>#include<map>#include<vector>#include<cmath>#define ll __int64#define INF 0x3fffffffusing namespace std;int n,m;int x[100005];bool C(int d){    int num=1;    int a=x[0];    int i=1;    while(num<m)    {        if(a+d<=x[i])        {            num++;            a=x[i];            i++;        }        else i++;        if(i==n) break;    }    if(num==m) return true;    else return false;}void solve(){    int l=0,r=x[n-1]+1;    while(r-l>1)    {        int mid=(r+l)/2;        if(C(mid)) l=mid;        else r=mid;    }    cout<<l<<endl;}int main(){    //freopen("d:\\Test.txt","r",stdin);    cin>>n>>m;    for(int i=0;i<n;i++)    {        scanf("%d",&x[i]);    }    sort(x,x+n);    solve();    return 0;}


0 0
原创粉丝点击