题面:

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. 操作系统 part4

    1.操作系统的启动 CPU加电后,执行BIOS(基本IO处理系统).BIOS会进行硬件的自检和初始化,然后把加载程序(BootLoader)从磁盘上的引导扇区中加载到指定位置0x7c00.然后控制权交 ...

  2. Sentry 高级使用教程

    Sentry 高级使用教程 Sentry versions https://github.com/getsentry/sentry-docs https://github.com/getsentry/ ...

  3. Apple Watch Series 6 字母图案 (图解教程)

    Apple Watch Series 6 字母图案 (图解教程) Apple Watch Series 6 自定义文字 如何开启 字母图案 solution 1 选择 彩色 表盘️ PS: 该复杂功能 ...

  4. Chrome 黑科技

    Chrome 黑科技 秒变记事本 data:text/html, <htmlcontenteditable> OK <a href="data:text/html, &qu ...

  5. vue-parent-child-lifecycle-order

    vue-parent-child-lifecycle-order vue parent child lifecycle order live demo https://99kyx.csb.app/ h ...

  6. Redis 大 key 问题 & 问题分析 & 解决方案

    Redis 大 key 问题 & 问题分析 & 解决方案 Redis 什么是 Redis 大 key 单个key 存储的 value 很大 hash, set,zset,list 结构 ...

  7. js function call hacker

    js function call hacker you don't know javascript function https://developer.mozilla.org/en-US/docs/ ...

  8. github & markdown & image layout

    github & markdown & image layout css & right https://github.com/sindresorhus/log-symbols ...

  9. 对DevOps的九大误解,是时候纠正了!

    DevOps是开发和运维的结合,有助于集成和自动化测试过程以及部署存储库,还提供了透明度以及灵活性.DevOps的目标如下: ●更快的上市时间(TTM). ●减少各种修复之间的前置时间.●提高部署频率 ...

  10. CF102920L Two Buildings【分治】【决策单调性】

    优秀的分治题目.是"2020-2021 ACM-ICPC, Asia Seoul Regional Contest"的一道题. Description There are \(n\ ...