题目见 :
http://codeforces.com/group/NVaJtLaLjS/contest/238166/problem/E
n头牛,每头牛在ti时间到达,有m辆车,每辆最多能够坐c头牛,求最小的最大等待时间。
看到“最小化最大值”,就想到“二分答案”。不用再说了…
#include
#include
#include
#include
using namespace std;
int n,m,c,t,l,r,mid;
int a[100500];
bool can(int p)
{
int i,j,now=a[1],used=0,have=1;
for (i=2;i<=n;i++)
{
have++;
if (a[i]-now>p||have>c)
{
used++;
now=a[i];
have=1;
}
if (used+1>m||have>c) return false;
}
return true;
}
int main()
{
int i;
scanf("%d %d %d",&n,&m,&c);
for (i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
l=0;r=1000000000;
while (r-l>1)
{
// printf("%d %d\n",l,r);
mid=(l+r)/2;
if (can(mid)) r=mid; else l=mid;
}
printf("%d\n",r);
return 0;
}