标签:
题意:给出n个位置,需要将m头牛放在这些位置中,使得所有相邻两头牛间的最小距离最大,求最大的最小距离;
思路:二分枚举最优解。先将所有位置排序,从最大总距离枚举到0,若满足差值大于等于枚举值的位置个数大于等于m,则当前枚举值为最优解。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int t,n,m; int num[500100]; int a[500100]; int judge(int x) { int cnt=1,temp=num[0]; for(int i=1;i<n;i++) { if(num[i]-temp>=x) { cnt++; if(cnt>=m) return 1; temp=num[i]; } } return 0; } int binary() { int l=0,r=num[n-1]-num[0]; while(l<=r) { int mid=(l+r)/2; if(judge(mid)) l=mid+1; else r=mid-1; } return l-1; } int main() { int i,j,k; while(scanf("%d",&t)!=EOF) { while(t--) { memset(num,0,sizeof(num)); scanf("%d%d",&n,&m); for(i=0;i<n;i++) { scanf("%d",&num[i]); } sort(num,num+n); printf("%d\n",binary()); } } }
SPOJ - AGGRCOW Aggressive cows(二分枚举最优解)
标签:
原文地址:http://www.cnblogs.com/dashuzhilin/p/4641777.html