题面:
题目翻译:
农夫约翰要用M(1 <= M <= 105)辆车来接送N(1 <= N <= 105)头牛,每辆车最多可以装C(1 <= C <= N)头牛.
某头母牛的到达机场的时间和它所乘坐的汽车离开的时间的差值为它所等待的时间.
如何能够让等得最久的一头牛的等待时间最短.
输出最短的等待时间.
题目分析:
首先将每头牛的到达时间从小到大排序.
从一头牛到达,直到他所乘坐的车离开的时间为它的等待时间.
可以先假设一个时间x.
如果一辆车在时间为t时搭了一头牛,那么这辆车就会在时间t+x离开.
所以每辆车只能搭载到达时间在t~t+x之间的牛,并且最多只能承载c头牛.
用二分法找出一个时间x.使得能够不多不到恰好搭载所有的牛.
代码:
#include<bits/stdc++.h>
long left = 0, right = 1e9, c, n, m, mid;
long cow[1000100];
bool check(long time){
long shangche = 0;
for(long i = 1; i <= m; ++i){
long cows = 0;
long first = cow[shangche];