Войти Регистрация
Алгоритмы

111. Банкоматы вдоль трассы

Сложная

Вдоль трассы М-4 есть spots — километры, на которых арендодатели согласны поставить банкомат Сбера (заправки, кафе, придорожные магазины). Точки даны в произвольном порядке, на одном километре бывает несколько.

Нужно поставить ровно k банкоматов в разных точках из списка так, чтобы они покрывали трассу равномерно: наименьшее расстояние между двумя соседними банкоматами должно быть как можно больше.

Верните это наибольшее возможное наименьшее расстояние в километрах.

В работе: Расстановка банкоматов или терминалов, чтобы соседние не делили один поток клиентов.

Пример 1

Ввод
spots = [120, 5, 300, 80, 210]
k = 3
Вывод
115

Точки 5, 120, 300: расстояния 115 и 180, наименьшее 115. Лучше не выйдет.

Пример 2

Ввод
spots = [40, 40, 90]
k = 2
Вывод
50

Две точки на 40-м км: берём 40 и 90, расстояние 50.

Ограничения

  • 2 ≤ k ≤ n ≤ 10⁵
  • 0 ≤ spots[i] ≤ 10⁹
  • Лимит — 2 с на тест (2000 мс).
Как вызывается ваш код Читать ввод и печатать ответ не нужно: мы вызываем функцию на каждом тесте и сравниваем то, что она вернула. print() и console.log() уходят в консоль.
def atm_spread(spots, k):
Бинарный поиск по ответуЖадный алгоритмСортировкацельO(n log n)

Источник: наша задача на данных Сбера. Условие пересказано своими словами.