这道题的基本题意为给你n个畜栏、c头牛,把这c头牛放在其中c个畜栏里,让牛与牛之间离得尽可能的远,要求求满足条件的牛与牛之间的最小距离。
源代码如下:
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
int main()
{ int n,c,a[100001],i,j,mid,min,max;
scanf("%d%d",&n,&c);
for(i=0;i<n;++i)
scanf("%d",&a[i]);
sort(a,a+n);
min=0;
max=a[n-1];
while(max-min>1)
{ int m=1;
mid=(min+max)/2;
for(i=1,j=0;i<n;++i)
if(a[i]-a[j]>=mid)
{ ++m;
j=i;
}
if(m>=c)
min=mid;
else max=mid;
}
printf("%d\n",min);
}
需要注意的是while里的循环条件要用max-min>1,如果用max>min的话,则无限循环没有结果输出。
本文介绍了一个经典的算法问题——如何在给定的畜栏中放置牛,使得任意两头牛之间的最小距离最大。通过使用二分查找的方法,在限定条件下找到最优解。
1385

被折叠的 条评论
为什么被折叠?



