您的位置:首页 > 其它

POJ 2456 Aggressive cows(二分查找最大化最小值)

2017-02-02 20:56 525 查看
题目链接:http://poj.org/problem?id=2456

【中文题意】有n间牛舍,第i间牛舍的位置在xi处。有m头牛,他们对牛舍都不满意,经常互相攻击。为了防止牛之间互相攻击,因此把每头牛放在距离其他牛尽量远的位置。也就是要最大化最近的两头牛之间的距离。

【思路分析】

1.对牛舍的位置进行排序。

2.把第一头牛放入x0牛舍。

3.二分距离,找到距离的最大值。

【AC代码】

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<algorithm>
using namespace std;
#define N 100005

int n,m,x
;

bool C(int d)
{
int last=0;
for(int i=1; i<m; i++)
{
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,ub=1e9+100;
while(ub-lb>1)
{
int mid=(ub+lb)/2;
if(C(mid))lb=mid;
else ub=mid;
}
printf("%d\n",lb);
}

int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i=0;i<n;i++)
{
scanf("%d",&x[i]);
}
solve();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj