您的位置:首页 > 其它

poj2456(二分搜索)

2015-03-09 00:55 302 查看
题意:n间牛舍,m头牛,最近的两头牛的距离为d,求d的最大值;
key:二分搜索。从0-无穷大中搜索符合要求的值。
/*二分搜索*/
#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;
const int maxn = 1e5;
int n, m;
int INF = 1e7;
int s = 0, e = INF;
int num[maxn];

bool yes(int d)
{
int last = 0;
int now;
for(int i = 1; i < m; i++){
now = last + 1;
while(now < n && num[now] - num[last] < d)   //计数距离小于d的数目
now++;
if(now == n)
return 0;
last = now;
}
return 1;
}

int main()
{
scanf("%d%d", &n, &m);
for(int i = 0; i < n; i++){
scanf("%d", &num[i]);
}
sort(num, num + n);    //将牛舍的位置从小到大排序
while(e - s > 1){
int mid = (s + e) / 2;
if(yes(mid))
s = mid;     //更新区间端点
else
e = mid;
}
printf("%d\n", s);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: