Решение задачи Магазины пончиков с Codeforces
С пояснением   Просмотров: 1598
Первый магазин продает пончики в розницу: каждый пончик стоит a долларов.
Второй магазин продает пончики оптом: коробка из b пончиков стоит c долларов. То есть если вы хотите купить x пончиков в этом магазине, то вам придется купить минимальное количество коробок такое, что суммарное количество пончиков больше или равно x.
Пояснение к задаче
Для начала заметим, что если существует значение для второго магазина, то существует и такое значение, которое делится на b. Любой x можно округлить наверх до ближайшего множителя b. Это не изменит цену во втором магазине и только увеличит цену в первом.
Также можно догадаться, что если существует значение для первого магазина, то значение с 1 по модулю b тоже существует (ровно 1 пончик помимо какого-то количества полных коробок). По той же логике — второму магазину нужна целая новая коробка, а первому магазину нужен только один пончик.
Посмотрим на минимальные значения двух этих типов:
x=b: это значение подходит для второго магазина, если одна коробка дешевле, чем b пончиков в первом магазине. В противном случае, сколько бы коробок мы не взяли, они никогда не будут дешевле, чем соответствующее количество пончиков.
x=1: это значение подходит для первого магазина, если один пончик дешевле, чем одна коробка во втором магазине. Применим ту же идею — в противном случае ни одно значение не подходит для первого магазина.
Асимптотика решения: O(1) на набор входных данных.
Автор: Администратор