Администрация города решила разбить парк на пустыре площадью N×M
. В парке планируется высадить деревья. Для каждого дерева нужно выделить участок прямоугольной формы с целочисленными сторонами и площадью, равной S
.
Все участки должны быть равны, одинаково ориентированы, и их стороны должны быть параллельны сторонам пустыря.
Какое наибольшее количество деревьев можно высадить в парке?
Формат выходных данных
В первой строке выведите одно целое число —
максимальное количество деревьев, которые можно высадить в этом парке. Гарантируется, что всегда удастся высадить хотя бы одно дерево.
python
def can_divide_park(N, M, S, k):
rows = N // k
columns = M // k
return rows * columns >= S
В этой функции мы сначала вычисляем количество участков по строкам и по столбцам, разделив размеры парка на количество участков для деревьев. Затем проверяем, что произведение количества участков по строкам и по столбцам больше или равно площади участка для дерева.
В методе двоичного поиска задаем левую и правую границы поиска (1 и максимальное количество деревьев) и выполняем итерации до тех пор, пока левая граница не станет больше правой. На каждой итерации вычисляем середину и проверяем возможность разделить парк на это количество участков для деревьев. Если это возможно, то устанавливаем левую границу на середину+1, если нет, то правую границу на середину.
Когда левая граница станет больше правой, это будет означать, что мы нашли максимальное количество деревьев, которое можно высадить в парке. Ответом на задачу будет являться значение правой границы.
Реализация данного алгоритма в коде на языке Python выглядит следующим образом:
python
def can_divide_park(N, M, S, k):
rows = N // k
columns = M // k
return rows * columns >= S
def max_number_of_trees(N, M, S):
left = 1
right = N * M // S
while left < right:
mid = (left + right + 1) // 2
if can_divide_park(N, M, S, mid):
left = mid
else:
right = mid - 1
return right
# ввод данных
N, M, S = map(int, input().split())
# вызов функции и вывод ответа
print(max_number_of_trees(N, M, S))
В данной реализации мы сначала считываем входные данные (размеры парка и площадь участка для дерева) с помощью функции `map` и оператора `input`. Затем вызываем функцию `max_number_of_trees` и передаем ей эти данные.
Функция `max_number_of_trees` возвращает ответ на задачу в соответствии с алгоритмом, описанным выше. Результат выводится с помощью функции `print`.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет