标签:二分查找
原题http://poj.org/problem?id=2456
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 6001 | Accepted: 2989 |
Description
Input
Output
Sample Input
5 3 1 2 8 4 9
Sample Output
3
Hint
Source
//题目意思,求两头最近的牛之间的最大距离
//方法。直接对距离进行二分,找出答案
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
//#include <limlits.h>
#include <ctype.h>
#include <string.h>
#include <string>
#include <math.h>
#include <algorithm>
#include <iostream>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <vector>
#include <map>
using namespace std;
#define N 100005
int x[N];
int n,c;
bool ok(int dis){
int i;
int next;
int last = 0;
for(i=1;i<c;i++){//要使所有的牛都要满足
next = last+1;
while(next<n && x[next]-x[last]<dis){//不断的扩大
next++;
}
if(next >= n){//因为此时牛的数量还没有满,说明了不能对所有的牛都满足,所以这个距离太大了
return false;
}
last = next;
}
return true;
}
int main(){
int i;
while(~scanf("%d%d",&n,&c)){
memset(x,0,sizeof(x));
for(i=0;i<n;i++){
scanf("%d",&x[i]);
}
sort(x,x+n);
int l = 0;
int r = 1000000000;//可能的距离
//int mid = l+(r-l)/2;
int mid;
while(r-l > 1){//不断的缩小距离,直到距离之间的距离为一
mid = (l+r)/2;
if(ok(mid) == true){//如果这个距离满足,说明了,还可以继续往大的来找
l = mid;
}
else{
r = mid;
}
}
printf("%d\n",l);
}
return 0;
}
标签:二分查找
原文地址:http://blog.csdn.net/zcr_7/article/details/38232279