题目概述
在起点和终点之间有n个石头,移除某些(不超过m个)石头后,让石头间的距离最大。
求石头间的最短距离d的最大值
跳石头
点此跳转 https://www.lanqiao.cn/problems/364/learning/?page=1&first_category_id=1&status=2&sort=difficulty&asc=0
思路分析:
最小值最大化想到二分答案法:
二分法确定d的值
贪心筛选石头
题解:
def check(x):cnt = 0last_idx = 0for i in d:if i - last_idx < x:cnt += 1else:last_idx = iif l - last_idx < x:cnt += 1return cnt <= ml, n, m = map(int, input().split())
d = []
for _ in range(n):d.append(int(input()))left, right = 1, l
ans = -1
while left <= right:mid = (left + right) // 2if check(mid):ans = midleft = mid + 1else:right = mid - 1print(ans)
END
如果有更多问题或需要进一步的帮助,可以在评论区留言讨论哦!
如果喜欢的话,请给博主点个关注 谢谢