题目描述:
一条长l的笔直的街道上有n个路灯,若这条街的起点为0,终点为l,第i个路灯坐标为a[i] ,每盏灯可以覆盖到的最远距离为d,
为了照明需求,所有灯的灯光必须覆盖整条街,但是为了省电,要使这个d最小,请找到这个最小的d。
输入描述:
每组数据第一行两个整数n和l(n大于0小于等于1000,l小于等于1000000000大于0)。
第二行有n个整数(均大于等于0小于等于l),为每盏灯的坐标,多个路灯可以在同一点。
输出描述:
输出答案,保留两位小数。
示例1:
输入输出示例仅供调试,后台判题数据一般不包含示例
输入:
7 15
15 5 3 7 9 14 0
输出:
2.50 ?
- 首先,我们需要读取输入的路灯数量 n 和街道长度 l。
- 接下来,我们需要读取每盏路灯的坐标,并将其存储在一个列表中。
- 对路灯的坐标列表进行排序,以便按照从小到大的顺序进行处理。
- 初始化变量?
max_distance
?为 0,表示当前最大的覆盖距离。- 遍历路灯的坐标列表,计算相邻路灯之间的距离,并更新?
max_distance
?为相邻路灯距离的最大值。- 考虑首尾路灯到街道边界的距离,将其与?
max_distance
?进行比较,并更新?max_distance
。- 最小的覆盖距离?
min_distance
?为?(max_distance / 2)
,保留两位小数。- 输出?
min_distance
。
# -*- coding: utf-8 -*-
'''
@File : 2023-B-路灯照明.py
@Time : 2024/01/01 01:33:18
@Author : mgc
@Version : 1.0
@Desc : None
'''
def calculate_min_distance(n, l, lamp_positions):
"""
计算最小的覆盖距离
Args:
n (int): 路灯数量
l (int): 街道长度
lamp_positions (list): 每盏路灯的坐标列表
Returns:
float: 最小的覆盖距离
"""
lamp_positions.sort() # 按坐标从小到大的顺序进行处理
max_distance = 0 # 当前最大的覆盖距离
for i in range(1, n):
distance = lamp_positions[i] - lamp_positions[i - 1] # 计算相邻路灯之间的距离
max_distance = max(max_distance, distance) # 更新最大的覆盖距离
# 考虑首尾路灯到街道边界的距离
max_distance = max(max_distance, lamp_positions[0], l - lamp_positions[-1])
min_distance = max_distance / 2 # 最小的覆盖距离为最大距离的一半
min_distance = round(min_distance, 2) # 保留两位小数
return min_distance
# 读取输入的路灯数量 n 和街道长度 l
n, l = map(int, input().split())
# 读取每盏路灯的坐标
lamp_positions = list(map(int, input().split()))
# 计算最小的覆盖距离
result = calculate_min_distance(n, l, lamp_positions)
# 输出结果
print(result)