Для решения этой задачи нам необходимо стратегически расставить фонари так, чтобы все дома были освещены, учитывая количество фонарей и их радиус действия. Давайте рассмотрим подход к решению и предложим алгоритм.
Алгоритм:
Определим параметры: У нас есть N домов, A фонарей с радиусом X и B фонарей с радиусом Y. Основная задача заключается в том, чтобы минимально использовать имеющиеся фонари для освещения всех домов.
Перебор и установка фонарей: Будем проходить по всем домам, начиная с первого. Если дом не освещен, мы должны установить фонарь. Лучше использовать фонарь с большим радиусом, так как он осветит больше домов.
Обработка освещения: При установке фонаря в дом i с радиусом R мы освещаем дома в диапазоне от max(1, i - R) до min(N, i + R). После установки фонаря необходимо уменьшить количество доступных фонарей.
Проверка: Если на каком-то этапе мы не можем установить фонарь для освещения дома, выводим -1.
Вывод результата: Для каждого установленного фонаря мы записываем его местоположение и радиус, затем выводим эти данные.
Пример реализации:
def light_street(N, A, X, B, Y):
result = []
lights = [0] * (N + 1) # массив для отслеживания, какой дом освещен
for i in range(1, N + 1):
if lights[i] == 0: # если дом не освещен
if A > 0 and (X >= Y or B == 0):
# Устанавливаем фонарь с радиусом X
result.append((i, X))
A -= 1
for j in range(max(1, i - X), min(N + 1, i + X + 1)):
lights[j] = 1
elif B > 0:
# Устанавливаем фонарь с радиусом Y
result.append((i, Y))
B -= 1
for j in range(max(1, i - Y), min(N + 1, i + Y + 1)):
lights[j] = 1
# Проверка, все ли дома освещены
if all(lights[1:]):
for res in result:
print(res[0], res[1])
else:
print(-1)
# Пример использования функции
N = int(input().strip())
A = int(input().strip())
X = int(input().strip())
B = int(input().strip())
Y = int(input().strip())
light_street(N, A, X, B, Y)
Объяснение кода:
- Мы используем массив
lightsдля отслеживания, какие дома освещены. - В цикле проходим по каждому дому. Если дом не освещен, выбираем, какой фонарь установить — с радиусом X или Y — в зависимости от доступных фонарей и их радиуса.
- После этого обновляем массив освещения и уменьшаем количество доступных фонарей.
- В конце проверяем, освещены ли все дома. Если все дома освещены, выводим параметры фонарей, иначе выводим -1.
Этот алгоритм будет эффективно работать в пределах заданных ограничений.
