蓝桥杯-跳石头-python

简介: 蓝桥杯-跳石头-python

题目描述


一年一度的"跳石头"比赛又要开始了!

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

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


输入描述


输入文件第一行包含三个整数 L,N,M,分别表示起点到终点的距离,起点和终点之间的岩石数,以及组委会至多移走的岩石数。

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

其中,0≤M≤N≤5×10^4,1≤L≤10^9。


输出描述


输出只包含一个整数,即最短跳跃距离的最大值。


输入输出样例


示例

输入

1. 25 5 2
2. 2
3. 11
4. 14
5. 17
6. 21

输出

4

运行限制


  • 最大运行时间:1s
  • 最大运行内存: 256M

思路:

题目要求:

       1.选手们在比赛过程中的最短跳跃距离尽可能长

       2.至多从起点和终点之间移走M 块岩石

我们首先来构造一个判断函数check(),这个函数的作用是判断最小步长为d的情况下,要移动的石头的个数是否符合我们题目中的要求2。是,则返回true;不是,则返回false。

接下来我们用二分搜索的方法来寻找题目中所求的:所有情况中最小的步子的最大值。我们每次都要用check()判断left和right的中间值是否符合题目中的要求。

如果符合要求,check()=ture说明此时的mid就是我们当前的最优解,我们将他保存,因为我们追求的是最大值,所以要改变左边界:left=mid+1,看看在mid的左边是否存在比mid更优的解。

如果不符合要求,check()=false,说明最小步长为mid的情况无法实现,即每次迈的步子都大于mid所需移动的石头太多了,超出了我们的限制。则需要改变右边界,使得mid变小。之后反复迭代,直到找到最优解。


1. def check(d):
2.   num=0
3.   pos=0
4. for i in range(0,n):
5. if a[i]-pos < d:
6.       num+=1
7. else:
8.       pos=a[i]
9. if num<=m: 
10. return 1
11. else:
12. return 0
13. 
14. l,n,m=map(int,input().split())
15. a=[]
16. ans=0
17. for i in range(n):
18.   a.append(int(input()))
19. left,right=1,l
20. while left<=right:
21.   mid=(left+right)//2
22. if check(mid):
23. left=mid+1
24.     ans=mid
25. else:
26. right=mid-1
27. print(ans)
目录
相关文章
|
安全 C++ Python
小游戏实战-Python实现石头剪刀布+扫雷小游戏
小游戏实战-Python实现石头剪刀布+扫雷小游戏
379 0
|
数据可视化 安全 数据安全/隐私保护
使用Python做个可视化的“剪刀石头布”小游戏
使用Python做个可视化的“剪刀石头布”小游戏
429 0
|
3月前
|
算法 C++
蓝桥杯二分法例题--跳石头
本题求最短跳跃距离的最大值,采用二分法解决。在0到总长度间二分枚举最小跳跃距离,通过贪心策略的check函数验证:统计需移除的岩石数是否不超过m。若满足则尝试更大距离,否则减小距离。最终逼近最优解。起点终点岩石不可拆。
|
Python
蓝桥杯练习题(一):Python组之入门训练题
这篇文章是关于蓝桥杯Python组的入门训练题,包括Fibonacci数列、圆的面积、序列求和和A+B问题的具体代码实现和样例输出。
366 0
|
Python
【Leetcode刷题Python】1049. 最后一块石头的重量 II
LeetCode 1049题 "最后一块石头的重量 II" 的Python解决方案,通过动态规划算法计算使最后一块石头的重量最小的方案。
119 1
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
714 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
人工智能 Python
蓝桥杯练习题(四):Python组之历届试题三十题
关于蓝桥杯Python组历届试题的三十个练习题的总结,包括题目描述、输入输出格式、样例输入输出以及部分题目的解题思路和代码实现。
528 0
蓝桥杯练习题(四):Python组之历届试题三十题
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(二):Python组之基础练习三十题
蓝桥杯Python编程练习题的集合,包含了三十个不同难度的编程题目,覆盖了基础语法、数据结构和算法等领域。
369 0
|
索引 Python 容器
【备战蓝桥杯】探索Python内置标准库collections的使用
【备战蓝桥杯】探索Python内置标准库collections的使用
258 1
|
开发者 Python
【备战蓝桥杯】如何使用Python 内置模块datetime去计算我与CSDN相遇的天数
【备战蓝桥杯】如何使用Python 内置模块datetime去计算我与CSDN相遇的天数
260 1

推荐镜像

更多