文章目录
- 最佳植树距离
最佳植树距离
- 在直线的公路上种树,给定坑位数量和位置,及需要种多少棵树苗;
- 树苗之间的最小距离是多少时,可以保证种的最均匀(树苗之间的最小距离最大);
输入描述:
第一行坑位数量;
第二行坑位的位置;
第三行需要种植树苗的数量;
输出描述:
树苗之间的最小距离
示例1:
输入:
7
1 3 6 7 8 11 13
3
输出:
6
示例2:
输入:
8
1 3 6 7 8 11 16 13
4
输出:
5
import bisect
# 输入数据
n = int(input())
pos_list = [int(x) for x in input().split(" ")]
m = int(input())
def count(num):
""" 统计以num为间距,在有效位置内可以种植的树的棵数 """
global pos_list
# 起始位置
stack = [pos_list[0]]
# 植树的棵数
cnt = 1
# 循环计算
while True:
# 在有序列表中插入一个值,并保证有序
# 返回(相等值的)最右边插入位置的索引
index = bisect.bisect(pos_list, stack.pop() + num)
if index == len(pos_list):
#
break
stack.append(pos_list[index])
cnt += 1
return cnt
def solve():
global pos_list, m
# 升序排序
pos_list.sort()
# 间距的最小值与最大值
left, right = 1, pos_list[-1] // (m-1)
while left < right:
# 取中间的间距值
mid = (left + right) // 2
if count(mid) >= m:
# 按照当前的间距种植的树多于m, 则表示间距过小
left = mid + 1
else:
right = mid
return left
print(solve())