POJ 2456 Aggressive cows(二分)

题目链接:?id=2456

题意:有一排n个牛舍,坐标分别为xi,,有m头牛,希望尽可能把他们之间分开,求他们之间最近的两头牛之间的距离最大可以拉到多少。这是二分中最大化最小值的题目,英文的题目又最大又最小有的人不易理解。

思路:显然两头最近的牛的距离太大将没有一种方式安置在牛舍中,两头最近的牛距离越小就越能放置在牛舍中,所以用把答案二分出来,每个mid要模拟放置暴力下可不可以放得下。

//532K188MS#include<cstdio>#include<iostream>#include<algorithm>#define inf 1000001000using namespace std;int n,m;int a[100100];bool ok(int x){int cnt=1;int tmp=a[1];while(cnt!=m){tmp+=x;int *p=lower_bound(a+1,a+1+n,tmp); //这里不需要用,只不过练习下这个函数。if(p==a+1+n) return false;tmp=*p;cnt++;}return true;}int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",&a[i]);}sort(a+1,a+n+1);int lb=0,ub=inf;while(ub-lb>1){int mid=(lb+ub)/2;if(ok(mid)){lb=mid;}else ub=mid;}printf("%d\n",lb);return 0;}

十七岁怎么会有七十岁的忧伤,十八岁怎么会有八十岁的等待。

POJ 2456 Aggressive cows(二分)

相关文章:

你感兴趣的文章:

标签云: