传送门

题面:

农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000,000,000). 但是,John的C (2 <= C <= N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗。为了不让牛互相伤害。John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢 ?

Input
* Line 1: Two space-separated integers: N and C * Lines 2..N+1: Line i+1 contains an integer stall location, xi
第一行:空格分隔的两个整数N和C
第二行---第N+1行:i+1行指出了xi的位置

Output
* Line 1: One integer: the largest minimum distance
第一行:一个整数,最大的最小值

Sample Input
5 3
1
2
8
4
9

题面描述

给出小隔间的编号(位置),然后把牛按一定的方法放进小隔间,要求任意两头牛之间的距离中,最小的那个距离相比于其他把牛放进隔间的方法的最小距离比较,是最大的。

题目分析

这里难就难在理解题意,就拿题目中的样例来说吧:有5个隔间,三头牛,给出了5个隔间的位置,就是:


现在要把三头牛放到这些隔间里面,怎样放才能是符合题意的答案呢?首先我们可以尝试把牛放到1,2,4号隔间,这时任意两头牛的最小距离是1,即任意选两头牛,它们的距离肯定是大于等于1的,这个1就称为任意两头牛的最小距离。我们尝试第二种方法:把牛放到2,4,8号隔间,这时任意两头牛的最小距离是2,2比刚刚的最小距离为1要大,所以舍弃1这个答案。我们再想一想,还有没有比2还要大的摆法?当然有(这不是废话嘛,题目都说答案是3了 )。我们可以尝试把牛放进1,4,8号隔间,这时最小距离是不是3?这个距离3比2和1都要大,而且我们也找不到最小距离比3还要大的摆法了,所以,这个最大的任意两头牛之间的最小距离为3。

那么,现在理解题意之后,有人会问,这跟二分有什么关系?这道题如何运用二分的思想?我们再看回题目:题目中告诉了我们两个隔间最小距离为1,最大距离为1,000,000,000。如果我们从大到小去一个一个验证是否可行,那肯定会超时,所以我们要用到二分的思想来减少运算时间。现在问题转化为如何用二分去解决这道题。我们回顾一下二分的主要代码:

    while(r > l){guess = (r+l)/2;if(guess < res) l = guess+1;else r = guess;}

其中:guess < res是我们更新依据,如果猜的数比结果小,更新左端点,否则更新右端点。这道题也是类似,重点就在这个判断依据上面。假如我们已经写了一个交check()的函数,这个函数可以验证你猜的距离guess是否成立(也就是按照你的最小距离放置,奶牛是可以全部放进隔间的),如果成立,就说明答案肯定是大于等于guess的,为什么呢?因为如果答案小于guess,而我当距离为guess时也成立,那么这个最大距离就不是答案,而是guess。所以凡是小于guess的距离都不用去考虑。即:

if(check(guess)) l = guess;

如果guess这个距离不成立的话,那么答案肯定比guess小,因为以guess为最小距离都不能把所有的牛放到隔间,更大的距离当然更加不行。所以拼凑起来就是:

if(check(guess)) l = guess;
else r = guess-1;

很显然,这是个左闭右开的区间,所以记得guess要向上取整。
最后把check()函数搞定就行了。AC代码:

#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1e6 + 5;
long long a[maxn];
int n, c;bool check(int m){int cnt = c;cnt--;int t = 0;for(int i = 1; i < n; i++){if(a[i]-a[t] >= m){cnt--;t = i;}}return cnt <= 0;
}int main(){cin >> n >> c;for(int i = 0; i < n; i++) cin >> a[i];sort(a, a+n);int l, r;l = 1;r = 1e9;int guess;while(r > l){guess = (l+r+1)/2;if(check(guess)) l = guess;else r = guess-1;}cout << l << endl;return 0;
}

转载于:https://www.cnblogs.com/happy-MEdge/p/10544516.html

HYSBZ 1734 二分相关推荐

  1. BZOJ 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛( 二分答案 )

    最小最大...又是经典的二分答案做法.. -------------------------------------------------------------------------- #inc ...

  2. 完全平方数 HYSBZ - 2440 (莫比乌斯函数容斥)

    完全平方数 HYSBZ - 2440 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些 数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数.然而 这丝毫不影响他对其他 ...

  3. 快乐地打牢基础(1)——二分与三分

    二分是一种常用且非常精妙的算法,常常是我们解答问题的突破口.二分的基本用途是在单调序列或单调函数中做查找操作.因此当问题的答案具有单调性时,就可以通过二分把求解转换为判定(根据复杂度理论,可知判定的难 ...

  4. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  5. 分治算法的设计思想(二分检索、二分归并排序)

    分治策略思想: 将原问题划分或者归结为规模较小的子问题. 递归或迭代求解每一个问题. 将子问题的解综合得到原问题的解. 性质: 子问题与原问题具有相同的性质. 子问题的求解彼此独立. 划分时子问题的规 ...

  6. LeetCode简单题之二分查找

    题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1: 输入: n ...

  7. 二分查找模板全面总结

    二分查找 二分法的引入 情形1 1.X的平方根 2.搜索旋转排序数组 情形2 1.第一个错误的版本 2.寻找峰值 3.寻找旋转排序数组中的最小值 情形3 在排序数组中查找第一个和最后一个位置 当遇到查 ...

  8. [C] [二分] C语言实现快速排序

    为了以防万一有人想不开想手撕快排呢?比如我. 通过快排来理解二分思想 什么是快排? 快排的思想不难,理解好递归很重要. 什么是递归? 递归,就是在运行的过程中调用自己. 构成递归需具备的条件: 子问题 ...

  9. Showstopper [POJ3484] [二分] [思维]

    Description 给你n个数列,问哪一个数字在所有的数列中出现了奇数次(最多一个). Sample Input 1 10 1 2 10 11 10 1 1 10 11 10 1 4 4 1 1 ...

最新文章

  1. 【Spark Summit East 2017】Spark化数据引擎
  2. webpack 安装使用(1)
  3. python杨辉三角居中center_python经典---杨辉三角(两种方法)
  4. hadoop balance failed
  5. VC6.0 DLL项目与WINDOWS项目的转换
  6. conda常用命令汇总
  7. (翻译)31天Windows Phone学习-1-项目模板
  8. TypeScript基础类型
  9. redis 集群_Redis集群部署
  10. [android游戏编程之从零开始].李华明,AndroidGameSourc
  11. Layui表格点击详情
  12. ad09只在一定范围内查找相似对象_AD09 常用快捷键
  13. 计算机科技论文写作题目,科技论文写作应注意的几个问题 | 科研动力
  14. linux 禁用超线程,Linux动态启用/禁用超线程技术
  15. 【esp32-s3】6.1 文件系统——spi挂载tf卡
  16. java小型计费系统设计_JAVA课程设计模拟电信计费系统
  17. 上官婉儿墓志 - 还原历史真相
  18. GitHub数据库榜单第一:Redis核心原理实践PDF,点赞已过百万+
  19. HTML:如何设置网页标题上的图标
  20. 【案例教程】基于RWEQ模型的土壤风蚀模数估算及其变化归因分析实践技术

热门文章

  1. 伪样式:hover ,:active,:focus
  2. DevExrepss的Grid属性设置及常用方法总结
  3. CVPR 2021 | 基于随机标签的神经架构搜索
  4. 深度学习精度提升 3 个小妙招:模型集成、知识蒸馏、自蒸馏
  5. 科研人看过来!中国人工智能学会-华为MindSpore学术奖励基金发布通知
  6. ECCV2020 Oral | 图像修复之再思考
  7. CV新赛事:密集场景行人检测
  8. 吓人!普京最新Deepfake视频来了,MIT现场伪造实时采访
  9. 收藏 | 人脸检测之Retinaface
  10. GAN模型计算量减少至1/9!MIT韩松团队提出GAN压缩法,已开源