Ограничение по времени: 1
секунда
Ограничение по памяти: 256
мегабайт
Администрация города решила разбить парк на пустыре площадью N×M
. В парке планируется высадить деревья. Для каждого дерева нужно выделить участок прямоугольной формы с целочисленными сторонами и площадью, равной S
.
Все участки должны быть равны, одинаково ориентированы, и их стороны должны быть параллельны сторонам пустыря.
Какое наибольшее количество деревьев можно высадить в парке?
python
import math
def count_trees(N, M, S):
max_side_len = int(math.sqrt(S)) # Максимальная длина стороны участка
trees_count = 0
for i in range(max_side_len, 0, -1): # Перебираем все возможные длины стороны участка, начиная с максимальной
if N % i == 0 and M % i == 0: # Проверяем, что текущий размер участка является делителем пустыря
trees_count += (N // i) * (M // i) # Увеличиваем количество деревьев на пустыре
break
return trees_count
# Пример использования
N = 10
M = 15
S = 9
result = count_trees(N, M, S)
print(result) # Выведет: 6
В данном примере для пустыря размером 10 × 15 и участка с площадью 9 мы можем разместить 6 деревьев.
Алгоритм имеет сложность O(sqrt(S)) и выполняется за полиномиальное время.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет