其他分享
首页 > 其他分享> > 周报5.22—5.29

周报5.22—5.29

作者:互联网

两道二分题:

在此之前我对于二分的理解还是比较浅薄的,或者说啥也不懂,以为二分就是对有序元素列的查找方法。但实际上二分的应用并不这么简单,比如根据二分法的有界性,我们可以对需要求解满足限制条件的极值的最大值或者最小值的问题应用二分。

 

例题1:

这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有N块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。

为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。由于预算限制,组委会至多从起点和终点之间移走M块岩石(不能移走起点和终点的岩石)。

 

输入格式以及样例:

第一行包含三个整数L,N,M分别表示起点到终点的距离,起点和终点之间的岩石数,以及组委会至多移走的岩石数。保证L≥1 且N≥M≥0。

接下来 N行,每行一个整数,第 i行的整数 Di​(0<Di​<L), 表示第 i 块岩石与起点的距离。这些岩石按与起点距离从小到大的顺序给出,且不会有两个岩石出现在同一个位置。

25 5 2

2

11

14

17

21

 

输出样例:

4(跳跃的最大距离)

 

如果不是这道题出现在二分专题里,我不会一开始就去往二分的方向思考,但实际上根据之前所说的应用场景,不难发觉这道题是在求最短距离的最大值,是典型的二分。

将每一次跳跃视作一次二分的查找,然后使得mid作为目前的最短距离,那么如果我们想要跳到的那块石头和我们所在石头的距离小于这个最短距离,根据题意就可以忽略,然后判断下一块石头是否大于mid,大于则将答案刷新,然后判断移去的石头数量有没有达到上限,超过了就让mid减小,反之让mid增大,循环之后就能解决问题。

 

例题2:

B 市和 T 市之间有一条长长的高速公路,这条公路的某些地方设有路标,但是大家都感觉路标设得太少了,相邻两个路标之间往往隔着相当长的一段距离。为了便于研究这个问题,我们把公路上相邻路标的最大距离定义为该公路的 “空旷指数”。

题目描述

现在政府决定在公路上增设一些路标,使得公路的“空旷指数”最小。他们请求你设计一个程序计算能达到的最小值是多少。请注意,公路的起点和终点保证已设有路标,公路的长度为整数,并且原有路标和新设路标都必须距起点整数个单位距离。

输入格式

第 1 行包括三个数 L、N、K,分别表示公路的长度,原有路标的数量,以及最多可增设的路标数量。

第 2 行包括递增排列的 N 个整数,分别表示原有的 N 个路标的位置。路标的位置用距起点的距离表示,且一定位于区间 [0,L] 内。

输出格式

输出1行,包含一个整数,表示增设路标后能达到的最小“空旷指数”值。

 

输入范例:

101 2 1

0 101

 

对应输出:

51

 

这道题在上一题之后,有了经验倒也思路比较明确,就是判断每个路标与当前mid的大小关系,如果大于mid,就在中间添加路标,每隔一个mid添加一个,说起来挺容易,结果写半天还是有问题,看了下题解,边界的地方出了细节问题,之前是有想到,但想半天把自己搞晕了就开摆(),本质上和上一题一样,最后在经过路标总数和限制的对比,多了就将mid增大,反之减小。

标签:二分,起点,终点,路标,岩石,mid,5.22,5.29,周报
来源: https://www.cnblogs.com/riiichard/p/16325425.html