Cho N thành phố (0 đến N-1) và danh sách thành phố có trạm. Tìm khoảng cách lớn nhất từ một thành phố bất kỳ đến trạm gần nhất. Thứ tự trạm cho trước có thể tùy ý.
Ví dụ: N = 6, stations = [2, 4] → Kết quả: 2 (thành phố 0 cách trạm 2 khoảng cách 2, thành phố 5 cách trạm 4 khoảng cách 1).
Thuật toán
- Tạo mảng
station_presentđánh dấu thành phố có trạm. - Duyệt qua các thành phố, đếm
dist= số thành phố liên tiếp không có trạm. - Khi gặp trạm:
maximum_dist = max(maximum_dist, (dist + 1) // 2), resetdist = 0. - Cuối cùng:
max(maximum_dist, dist)(xử lý đoạn cuối không có trạm).
Ví dụ code
def get_max_dist(N, station):
station_present = [False] * N
for city in station:
station_present[city] = True
dist, maximum_dist = 0, min(station)
for city in range(N):
if station_present[city]:
maximum_dist = max((dist + 1) // 2, maximum_dist)
dist = 0
else:
dist += 1
return max(maximum_dist, dist)
N = 6
station = [2, 4]
print(get_max_dist(N, station))
Input
6, [2, 4]
Output
2