
Python, задача Сегодня утром жюри решило добавить в вариант еще одну задачу. Очень Легкую Задачу.
Ответственный секретарь Оргкомитета напечатал ее условие в одном экземпляре, и теперь ему до начала олимпиады надо напечатать еще N копий.В его распоряжении два ксерокса. Первый копирует лист за x секунд, а второй - за y. Можно использовать один ксерокс, а можно два (и даже одновременно, так как копировать можно не только с оригинала, но и с копии). Помогите ему выяснить какое минимальное время ему понадобится.Формат вводаВводятся три числа: N, x, y.Формат выводаВыведите одно число - минимальное количество секунд, которое нужно на создание N копий.ПримерыВвод 4 1 1Вывод 3 Ввод 5 1 2Вывод 4

Ответы на вопрос

N, x, y = map(int, input().split())
x_time, y_time = x, y
time = 0
if x > y:
time += y
else:
time += x
N -= 1
while N > 0:
if x_time == y_time:
N -= 2
time += x
y_time, x_time = y, x
elif x < y:
if x_time < y:
x_time += x
N -= 1
time += x
else:
if y_time < x:
y_time += y
N -= 1
time += y
print(time)



Для решения этой задачи можно использовать бинарный поиск, чтобы найти минимальное время, за которое можно скопировать N копий задачи. Зная количество копий N и время копирования на каждом ксероксе (x и y), мы можем установить нижнюю и верхнюю границы для бинарного поиска.
- Установим нижнюю границу
low
в 0 секунд, так как можно сразу начать копировать. - Установим верхнюю границу
high
вN * max(x, y)
, так как в худшем случае можно использовать только один ксерокс и копировать N раз на более медленном из них. - Пока
low
меньшеhigh
, будем делать бинарный поиск. - На каждой итерации вычислим среднее время
mid
междуlow
иhigh
. - Оценим, сколько копий могут быть сделаны за время
mid
с использованием каждого ксерокса. - Сравним полученное количество копий с N и соответствующим образом обновим границы поиска.
- Когда
low
станет больше или равноhigh
, мы найдем минимальное время.
Вот реализация алгоритма на языке Python:
pythondef can_copy_copies(N, x, y, time):
return time // x + time // y >= N
def min_copy_time(N, x, y):
low = 0
high = N * max(x, y)
while low < high:
mid = (low + high) // 2
if can_copy_copies(N, x, y, mid):
high = mid
else:
low = mid + 1
return low
# Ввод данных
N, x, y = map(int, input().split())
# Вывод результата
print(min_copy_time(N, x, y))
Теперь вы можете ввести значения N, x и y и получить минимальное время, за которое можно сделать N копий задачи.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili