# 2019 GDUT Rating Contest #I E. Convention

2019 GDUT Rating Contest #I E. Convention

题目见 :
http://codeforces.com/group/NVaJtLaLjS/contest/238166/problem/E

题目大意:

有n头牛,第i头牛在ti到达,有m辆车,每辆能够载c头牛,求出最小的最长等待时间。

思路:

看见“最小化最大值”,你会不由自主想到“二分”。

一次优化:

用have,used,分别表示当前的积累牛数,已经使用的车数,即可快速模拟。

实现:

#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;
}

你可能感兴趣的:(题解)