Задача: Рекламные паузы
Цель: Понять пошагово и получить формулу вычисления.
Ключевые идеи
- Реклама вставляется после каждых a минут показа фильма. Пауза добавляется только пока в фильме есть ещё минуты до конца.
- Если момент начала рекламы совпадает с концом фильма (то есть после n минут фильма), рекламу не показывают.
- Поэтому количество рекламных пауз m равно числу k таких, что k·a < n. То есть m = floor((n−1)/a).
- Каждая пауза длится b минут. Общее время показа равно n + m·b.
Формула
- m = (n − 1) div a
- итоговая длительность T = n + m · b
Пошаговое решение
- Прочитали значения a, b, n (типа int64).
- Вычислили m = (n − 1) / a (целочисленное деление).
- Вычислили T = n + m · b.
- Вывелили T.
Адаптация под параметры
- Если a > n, то m = 0 и T = n — без рекламы.
- Все операции выполняются в 64-битных целых, чтобы не переполниться (может достигать ~10^18).
Примеры
- Пример 1: a=3, b=2, n=10 m = (10−1)/3 = 3, T = 10 + 3·2 = 16
- Пример 2: a=5, b=7, n=5 m = (5−1)/5 = 0, T = 5
- Пример 3: a=1, b=1, n=5 m = (5−1)/1 = 4, T = 5 + 4·1 = 9
Код (пример на C++17)
- Используйте 64-битные целые (long long)
#include <bits/stdc++.h> using namespace std;
int main() { ios::sync_with_stdio(false); cin.tie(nullptr); long long a, b, n; if (!(cin >> a)) return 0; cin >> b >> n;
long long m = (n - 1) / a; // количество рекламных пауз
long long total = n + m * b; // общее время
cout << total << "\n";
return 0;
}
Альтернативно (Python)
- total = n + ((n - 1) // a) * b
Если нужно, могу привести дополнительные примеры или помочь адаптировать решение под другой язык.