题目背景

Mad Jim Jaspers为了证明钕磁铁的强大,拿来了一个有N个小槽的长木条,M个钕磁铁,第i个小槽在xi的位置上,为了不让磁铁互相吸引,每块磁铁离其他磁铁的距离应该尽可能的大。
请你帮MJJ写一个程序,求出所有磁铁之间最小距离的最大值。只要磁铁距离大于等于1就不会互相吸引。

输入格式:

第一行两个数,分别代表N和M。 接下来N行,每行一个整数,代表第i个小槽在木板上的位置。(最左边作为原点0)

输出格式:

输出所有磁铁之间最大的最小距离d。

输入样例#1:

5 3
1
2
8
4
9

输出样例#1:

3

思路
二分法求最大的最小值:二分搜索判断距离,代码自带解析
代码如下:

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f;
using namespace std;
int a[100005];
int n,m;
bool jude(int d)
{int last=0;  //last 表示第一个磁铁放置的位置for(int i = 1; i < m; i++){int now=last+1;while(now<n&&a[now]-a[last]<d)now++;//now表示下一个磁铁放置的位置if(now==n)return false;//如果不满足,返回falselast=now;  //记录该磁铁放置的位置}return true;
}
int main()
{scanf("%d%d",&n,&m);for(int i=0;i<n;i++)scanf("%d",&a[i]);sort(a,a+n);  //从小到大排序int l=0,r=INF;while(r-l>1){   //二分搜索int mid=(l+r)/2;if(jude(mid))l=mid;//如果该距离满足条件,则距离+else r=mid;//否则,距离- }printf("%d\n",l);return 0;
}

二分——最大的最小值相关推荐

  1. POJ-2456.Aggressivecows.(二分求解最大化最小值)

    本题大意:在坐标轴上有n个点,现在打算在这n个点上建立c个牛棚,由于牛对厂主的分配方式表示很不满意,它很暴躁,所以它会攻击离它很近的牛来获得快感,这件事让厂主大大知道了,他怎么可能容忍?所以他决定有策 ...

  2. NOIP2015跳石头【二分答案(最小值最大化) | 贪心】

    519. 跳石头 - AcWing题库 组委会已经选择好了两块岩石作为比赛起点 0 和终点 L . 在起点和终点之间,有 NN 块岩石(不含起点和终点的岩石). 在比赛过程中,选手们将从起点出发,每一 ...

  3. 通往奥格瑞玛的道路(二分 + Dijkstra)

    通往奥格瑞玛的道路(二分 + 最短路) 思路: 1.二分可解决最大最小或者最小最大一类的问题 2.题目意思可以说我根本看不懂,其实题意:从1到n所有可行路径中,每个路径都有某个城市收费最大,求所有城市 ...

  4. 力扣 774. 最小化去加油站的最大距离 二分答案

    774. 最小化去加油站的最大距离 整数数组 stations 表示 水平数轴 上各个加油站的位置.给你一个整数 k . 请你在数轴上增设 k 个加油站,新增加油站可以位于 水平数轴 上的任意位置,而 ...

  5. 13.数据结构:二分搜索树

    大家好,我是王有志.关注王有志,回复DSA获取数据结构与算法学习资源. 好久不见,不知道大家这个十一假期过得怎么样?有没有做好迎接7个工作日的准备呢? 接下来就开始我们今天的主题吧,第一个二叉树的应用 ...

  6. java实现二分搜索树

    1.二分搜索树定义 二分搜索树是一个二叉树 二分搜索树的节点的值大于左子树,小于右子树的值 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FAbuFGnW-158419 ...

  7. 《剑指offer》c++版本 11. 旋转数组的最小数字

    如题: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...

  8. 数据结构与算法(3)——树(二叉、二叉搜索树)

    前言:题图无关,现在开始来学习学习树相关的知识 前序文章: 数据结构与算法(1)--数组与链表(https://www.jianshu.com/p/7b93b3570875) 数据结构与算法(2)-- ...

  9. BZOJ4590: [Shoi2015]自动刷题机

    [传送门:BZOJ4590] 简要题意: 有l秒时间,AC了k道题,给出每秒写的代码行数(行数>0表示写,<0表示删除,如果剩下的行数不够删,则为0),假设行数>=n时能够提交AC一 ...

最新文章

  1. 罗斯蒙特1056ph电极_ROSEMOUNT 罗斯蒙特 PH电极 0396R-10-2(0396R-10-2)
  2. centos7 安装 redis
  3. Windows Azure虚拟机概览
  4. Windows Server 2012 从入门到精通系列之如何提高DC持续性?
  5. 分布式锁(一) Zookeeper分布式锁
  6. Funnel-Transformer:让Transformer更高效地处理长序列
  7. redhat制作本地光盘yum源
  8. dom常用操作全后续会补充
  9. flink查看operater链的中间结果+SingleOutputStreamOperator的用法
  10. How is component metadata dependency dependencies consumed in the runtime
  11. LeetCode 642. 设计搜索自动补全系统(Trie树)
  12. linux的 定时器传参数,JavaScript 定时器调用传递参数的方法
  13. oracle数据库监听问题,分享一个有意思的Oracle19c数据库监听异常
  14. addcslashes与stripcslashes
  15. ELK日志搜索平台搭建
  16. 《游戏设计艺术(第二版)》第十二章个人学习
  17. linux 块设备 dm,[CentOS7]dm块设备删除
  18. 植物大战僵尸pak修改
  19. python 三维栅状图_基于OpenGL的二维矢量地图可视化技术研究
  20. Windows使用SSH登录VM虚拟机

热门文章

  1. GridView 高级技术
  2. Url解码,兼容utf-8和gb2312
  3. easyUI表单验证扩展
  4. WPF开发为按钮提供添加,删除和重新排列ListBox内容的功能
  5. 001 python接口 get请求
  6. nodejs系列笔记02---模块路径解析
  7. 5.修改本地库/远程仓库的地址
  8. Silverlight之我见——数据批示(2)
  9. 【jQuery笔记Part1】11-jQuery选择器
  10. Linux操作Oracle(6)——Oracle11g OPatch 打补丁全纪录【Oracle11g windowsX64位环境+OPatch11.2.0.3.28】及资源下载