Ctrl K

Камеры на ограде

Сложная
Участок — квадрат с углами в точках (0, 0), (0, side), (side, 0) и (side, side). На ограде участка размечены места для камер: spots[i] = [x, y] — координаты места, все места различны и лежат на границе квадрата. Нужно выбрать ровно cameras мест и поставить туда камеры так, чтобы они стояли как можно дальше друг от друга. Расстояние между точками (x₁, y₁) и (x₂, y₂) считается как |x₁ - x₂| + |y₁ - y₂| (манхэттенское). Верните наибольшее возможное значение минимального расстояния между двумя выбранными камерами.
Пример 1
side=3, spots=[[0, 0], [0, 3], [3, 3], [3, 0], [1, 0], [3, 2]], cameras=4 → 3

Ставим камеры в четыре угла: любые две из них отстоят друг от друга хотя бы на 3.

Пример 2
side=2, spots=[[0, 1], [1, 2], [2, 1], [1, 0], [0, 0]], cameras=5 → 1

Ставим все пять камер; ближе всех друг к другу (0, 1) и (0, 0) — расстояние 1.

Пример 3
side=4, spots=[[0, 2], [2, 4], [4, 2], [2, 0], [0, 0], [4, 4]], cameras=4 → 4
Ограничения
  • 1 ≤ side ≤ 10⁹
  • 4 ≤ len(spots) ≤ min(4 · side, 15 000)
  • Каждая точка spots[i] лежит на границе квадрата, все точки различны
  • 4 ≤ cameras ≤ min(25, len(spots))
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамый тяжёлый день чтения СложнаяОбрезать до горки СложнаяВставки, чтобы проступил шаблон СложнаяГрузчики и энергетики СложнаяВсе фонари горят как можно дольше Сложная
загружаем Python…
Вход
side=3, spots=[[0, 0], [0, 3], [3, 3], [3, 0], [1, 0], [3, 2]], cameras=4
Ожидается
3

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 38 тестов на сервере, включая скрытые.