题面:

E. Convention

Input file: standard input
Output file: standard output
Time limit: 1 second
Memory limit: 256 megabytes
 
Cows from all over the world are arriving at the local airport to attend the convention and eat grass. Specifically, there are N cows arriving at the airport (1 ≤ N ≤ 10^5) and cow i arrives at time ti (0 ≤ ti ≤ 10^9). Farmer John has arranged M (1 ≤ M ≤ 10^5) buses to transport the cows from the airport. Each bus can hold up to C cows in it (1 ≤ C ≤ N). Farmer John is waiting with the buses at the airport and would like to assign the arriving cows to the buses. A bus can leave at the time when the last cow on it arrives. Farmer John wants to be a good host and so does not want to keep the arriving cows waiting at the airport too long. What is the smallest possible value of the maximum waiting time of any one arriving cow if Farmer John coordinates his buses optimally? A cow’s waiting time is the difference between her arrival time and the departure of her assigned bus.
It is guaranteed that MC ≥ N.
 
 
Input
The first line contains three space separated integers N, M, and C. The next line contains N space separated integers representing the arrival time of each cow.
 
Output
Please write one line containing the optimal minimum maximum waiting time for any one arriving cow.
 
Example
Input
6  3  2
1  1  10  14  4  3
Output
4
 

题目描述:

农夫要在机场接待奶牛,给出每个奶牛到达的时间。现在农夫有M辆车,一辆车可以装满C头牛,问如何安排才能使在这所有奶牛的等待时间中(有些车没装够奶牛可能会多等几头奶牛来再开走,这样就产生了等待时间),奶牛等待时间最大的那个尽可能短。
 

题目分析:

这道题的表述有点像之前我做过的题:传送门
其实关键的是这里:“最大的时间尽可能短”,和奶牛隔间那道题很相似。这提示了我们应该要用二分来做。我们再看看题目的时间:10^9  ,这么大,当用二分来做时,复杂度是O(log n),也就是大概32次就能做出来了,说明极有可能是二分。这道题的确用二分来完成,所以套二分的模板就可以完成二分的部分,只要区间设置成左开右闭就行了,关键是check()函数怎么写,这个是重点。
 
当我们要验证时间 t 是否满足题目的最大等待时间时,我们可以这样想:
假设之前公交车上没有牛,现在第一头牛到了机场,然后上了车,只要这第一头牛等待了 t 时间后把车开走就行了。在这 t 时间内,如果还有其他牛到达,就把他们先安排上第一头牛的车。车如果载满牛的话就开走。然后再反复按照这个规则安排。如果按照这样的规则,车不够用,那么就返回false,车够用的化就返回true。有些人可能有疑问:如果车还没有等待到时间 t 后提前开走(也就是载满牛的情况),用这个方法就算不出答案了。其实在这里也是可以算出答案的,因为时间 t 满足上面的条件时,答案区间就会变成( left, t]。也就是说答案是小于等于 t 的,就算我们的 t 是不符合最大等待时间的,但是我们也得出了答案的范围,所以这个check()函数的写法是有效的。
 
 
AC代码:
 1 #include <cstdio>
2 #include <cstring>
3 #include <iostream>
4 #include <cmath>
5 #include <set>
6 #include <algorithm>
7 using namespace std;
8 const int maxn = 1e5+5;
9 int n, m, c;
10 long long a[maxn];
11
12 bool check(int t){
13 int all = m; //车的数量
14 int p = 0;
15 while(p < n){
16 int k = p;
17 int d = c; //车的装载量
18 while(a[k]-a[p] <= t && d && k < n){
19 d--, k++;
20 }
21 p = k;
22 all--;
23 }
24 if(all >= 0) return true; //车够用就返回true
25 else return false;
26 }
27
28 int main(){
29 cin >> n >> m >> c;
30 for(int i = 0; i < n; i++) cin >> a[i];
31 sort(a, a+n);
32
33 int l = -1, r = 1e9;
34 int mid;
35 while(l < r){
36 mid = (l+r)/2; //左开右闭向下取整
37 if(check(mid)){
38 r = mid;
39 }
40 else l = mid+1;
41 }
42 cout << l << endl;
43 return 0;
44 }
 
 

2019 GDUT Rating Contest I : Problem E. Convention的更多相关文章

  1. 2019 GDUT Rating Contest II : Problem F. Teleportation

    题面: Problem F. Teleportation Input file: standard input Output file: standard output Time limit: 15 se ...

  2. 2019 GDUT Rating Contest III : Problem D. Lemonade Line

    题面: D. Lemonade Line Input file: standard input Output file: standard output Time limit: 1 second Memo ...

  3. 2019 GDUT Rating Contest I : Problem H. Mixing Milk

    题面: H. Mixing Milk Input file: standard input Output file: standard output Time limit: 1 second Memory ...

  4. 2019 GDUT Rating Contest I : Problem A. The Bucket List

    题面: A. The Bucket List Input file: standard input Output file: standard output Time limit: 1 second Me ...

  5. 2019 GDUT Rating Contest I : Problem G. Back and Forth

    题面: G. Back and Forth Input file: standard input Output file: standard output Time limit: 1 second Mem ...

  6. 2019 GDUT Rating Contest III : Problem E. Family Tree

    题面: E. Family Tree Input file: standard input Output file: standard output Time limit: 1 second Memory ...

  7. 2019 GDUT Rating Contest III : Problem C. Team Tic Tac Toe

    题面: C. Team Tic Tac Toe Input file: standard input Output file: standard output Time limit: 1 second M ...

  8. 2019 GDUT Rating Contest III : Problem A. Out of Sorts

    题面: 传送门 A. Out of Sorts Input file: standard input Output file: standard output Time limit: 1 second M ...

  9. 2019 GDUT Rating Contest II : Problem G. Snow Boots

    题面: G. Snow Boots Input file: standard input Output file: standard output Time limit: 1 second Memory ...

随机推荐

  1. 爬虫入门六 总结 资料 与Scrapy实例-bibibili番剧信息

    title: 爬虫入门六 总结 资料 与Scrapy实例-bibibili番剧信息 date: 2020-03-16 20:00:00 categories: python tags: crawler ...

  2. select(),fd_set(),fd_isset()

    1. select函数 1. 用途 在编程的过程中,经常会遇到许多阻塞的函数,好像read和网络编程时使用的recv, recvfrom函数都是阻塞的函数,当函数不能成功执行的时候,程序就会一直阻塞在 ...

  3. 错误记录:MQJE001: 完成代码为 '2',原因为 '2035'。

    在windows server 2008上安装websphere mq7.5 服务端,建立队列.通过java client向我的机器的队列发送消息和接收消息. mq安装成功,队列管理器.队列.通道也都 ...

  4. 探究为什么FreeRTOS 有些API不能在中断服务函数中调用,转而需要调用带ISR的版本

    用了好久的FreeRTOS以前只是知道,如果在中断服务程序中调用某一些FreeRTOS的API函数时需要注意,如果有ISR版本的一定要调用末尾带ISR的函数,并且中断服务程序要调用freeRTOS的A ...

  5. 008.NET5_IIS安装教程

    控制面板->程序->启动或关闭Windows功能

  6. tfrecords转图片存储

    import os import shutil import tensorflow as tf import time import sys import cv2 # 图片存放位置 PATH_RES ...

  7. 使用 js 实现十大排序算法: 归并排序

    使用 js 实现十大排序算法: 归并排序 归并排序 refs js 十大排序算法 All In One https://www.cnblogs.com/xgqfrms/p/13947122.html ...

  8. image cache service

    image cache service 图床 https://images.weserv.nl/ https://github.com/weserv/images meta & referre ...

  9. Android Studio & zh-Hans

    Android Studio & zh-Hans https://developer.android.com/studio?hl=zh-cn https://developer.android ...

  10. infinite auto load more & infinite scroll & load more

    infinite auto load more & infinite scroll & load more https://codepen.io/xgqfrms/pen/NZVvGM ...