标签:二分查找
原题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