# 2019 GDUT Rating Contest #I E. Convention

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

    推荐阅读