Представьте сетку квадратов W на H, которая оборачивается тороидально. Элементы размещаются на сетке следующим образом.
Первый элемент можно разместить на любом квадрате, но последующие элементы не должны находиться в пределах манхэттенского расстояния R от любого предыдущего элемента (также известного как окрестность фон Неймана диапазона R ). Тщательный выбор позиций позволяет разместить большое количество элементов в сетке, прежде чем больше не будет действительных позиций. Однако вместо этого рассмотрите противоположную цель: Какое наименьшее количество предметов может быть размещено и не оставит больше действительных позиций?
Вот зона отчуждения радиуса 5:
Вот еще одна зона исключения радиуса 5, на этот раз около краев, поэтому поведение оборачивания очевидно:
вход
Три целых числа:
- W : ширина сетки (положительное целое число)
- H : высота сетки (положительное целое число)
- R : радиус зоны исключения (неотрицательное целое число)
Выход
Целое число N , которое представляет собой наименьшее количество элементов, которые можно разместить, чтобы предотвратить дальнейшие допустимые размещения.
Детали
- Радиус нуля дает зону исключения в 1 квадрат (ту, на которой был размещен элемент).
- Радиус N исключает зону, которая может быть достигнута за N ортогональных шагов (помните, что края оборачиваются тороидально).
Ваш код должен работать для тривиального случая R = 0, но не должен работать для W = 0 или H = 0.
Ваш код должен также иметь дело со случаем , когда R > W или R > H .
Ограничение по времени и контрольные примеры
Ваш код должен быть в состоянии справиться со всеми тестовыми примерами, и каждый тестовый случай должен быть выполнен в течение 5 минут. Это должно быть легко (пример решения JavaScript занимает несколько секунд для каждого теста). Ограничение по времени главным образом исключает использование подхода грубой силы. Примерный подход все еще довольно грубая сила.
Если ваш код завершается в течение 5 минут на одной машине, но не на другой, это будет достаточно близко.
Тестовые случаи в форме ввода: вывод какW H R : N
5 4 4 : 1
5 4 3 : 2
5 4 2 : 2
5 4 1 : 5
7 5 5 : 1
7 5 4 : 2
7 5 3 : 2
7 5 2 : 4
8 8 8 : 1
8 8 7 : 2
8 8 6 : 2
8 8 5 : 2
8 8 4 : 2
8 8 3 : 4
7 6 4 : 2
7 6 2 : 4
11 7 4 : 3
11 9 4 : 4
13 13 6 : 3
11 11 5 : 3
15 14 7 : 2
16 16 8 : 2
Фрагмент, чтобы помочь визуализировать и поиграть с идеями
Пример (безгольфовое) решение
Просто пример для небольших выходных данных (в результате радиус не намного меньше, чем ширина и высота). Может обрабатывать любой из тестовых случаев, но будет превышать время ожидания и сдаваться для большинства более крупных случаев.