Буст для популярного поста
Условие
У школьного медиа есть пост, который нужно удержать в «популярном» ровно c часов подряд.
Продвижение можно покупать двумя способами:
- на 1 час за a монет;
- пакетом на 7 часов за b монет.
Пакеты можно покупать сколько угодно. Если продвижения куплено больше, чем нужно, лишние часы просто «сгорают» — это разрешено.
Найдите минимальное количество монет, которое придётся потратить.
Формат ввода
В одной строке даны три целых числа a, b, c.
Формат вывода
Выведите одно целое число — минимальную стоимость.
Ограничения
- 0 ≤ a ≤ 700000000
- 0 ≤ b ≤ 700000000
- 0 ≤ c ≤ 700000000
Пример
Ввод:
3 10 8
Вывод:
13Как решать — идея подхода
Приём: Жадный выбор по блокам + сравнение цен
Ключевое наблюдение: покупка продвижения — это сумма независимых «кусочков» по времени. Для каждых 7 часов не важно, что происходит в других местах: вы просто решаете, оплатить их пакетом за b или семью часами по a. То же самое с остатком (меньше 7 часов): его можно добрать по 1 часу или одним лишним пакетом, а лишние часы сгорят.
Почему жадно работает: стоимость линейная, ограничения на число покупок нет, а «сгорание» разрешено. Значит, оптимум получается из локальных минимальных выборов для каждого блока.
План:
- Найдите
q, r = divmod(c, 7), где q — число полных блоков по 7 часов, r — остаток. - Для каждого полного блока выберите дешевле: пакет или 7 одиночных часов:
min(b, 7*a). - Полные блоки стоят
q * min(b, 7*a). - Остаток r часов: либо
r*a, либо один пакетb(лишнее сгорит), берёмmin(r*a, b). - Ответ — сумма двух частей.
Сложность: O(1) по времени и памяти.
Частая ошибка: считать, что пакет на 7 часов можно брать только для «полных» семёрок. На самом деле для остатка тоже нужно сравнить с b, потому что переплата может быть выгоднее, чем докупать по 1 часу.
Разберись руками
1 час продвижения стоит 3 монеты, а пакет на 7 часов стоит 10 монет. Нужно удержать пост популярным 8 часов подряд, лишние купленные часы могут сгореть. Давай руками найдём минимальную стоимость на этом примере.
- Посчитай, сколько стоят 7 часов, если покупать только по 1 часу (1 час = 3 монеты).
- Что выгоднее, чтобы получить 7 часов продвижения?
- Если ты уже взял 1 пакет (это 7 часов), сколько часов ещё не хватает до 8?
- За оставшийся 1 час можно либо купить 1 час за 3 монеты, либо взять ещё один пакет за 10 (лишние 6 часов сгорят). Какой будет минимальный итоговый расход монет?
Идея: Разбей нужные часы на «полные семёрки» и остаток. Для каждой семёрки выбирай более дешёвый способ: один пакет или 7 одиночных часов. Для остатка снова выбери, что дешевле: добрать одиночными часами или взять ещё один пакет (лишнее можно сжечь). Потом сложи выбранные стоимости.
Решить задачу с автопроверкой на Python →
Куда дальше
- Школьный этап ВсОШ по информатике — как устроен первый этап и план подготовки за четыре недели
- На программиста по олимпиаде: путь по классам — что даёт диплом, куда с ним берут на ИТ-направления и почему решает 9 класс
- Вердикты судьи: WA, TLE, RE, PE, CE — что значит каждый код проверяющей системы и где искать причину