Благотворительные круги на стадионе

тема: Арифметика и формулы (O(1)) · уровень: средний

Условие

В школьной легкоатлетической секции тренер ведёт «лестницу кругов» на стадионе.

Стадион стандартный: 1 круг = 400 метров.

Но есть традиция: в каждый 5‑й день (5, 10, 15, ...) после основной тренировки добавляют ещё 1 круг в поддержку благотворительного забега.

Сколько метров пробегут ребята за первые n дней?

Формат ввода

Одно целое число n.

Формат вывода

Одно целое число — сколько метров пробегут за первые n дней.

Ограничения

Пример

Ввод:

7

Вывод:

11600

Пояснение: за 7 дней основной план даёт 1+2+...+7=28 кругов, и ещё 1 круг за день 5. Итого 29 кругов, то есть 29·400=11600 метров.

Как решать — идея подхода

Приём: Формулы суммы и целочисленное деление

Ключевое наблюдение: считать по дням нельзя — n до 1e9. Но количество кругов за первые n дней выражается формулой.

Основной план — это сумма 1+2+...+n. Она считается за O(1) по формуле n*(n+1)//2. Дополнительные «благотворительные» круги добавляются ровно в дни, кратные 5. Значит, их количество — это просто сколько таких дней среди 1..n, то есть n//5 (целочисленное деление).

Дальше всё складывается и переводится в метры: 1 круг = 400 м.

План решения:

Сложность: O(1) по времени и O(1) по памяти.

Частая ошибка: неверно считать бонус как n/5 (обычное деление) или пытаться проверять каждый день циклом — это не пройдёт по времени при больших n. Также не забудьте про целочисленное // и что ответ может быть большим (в Python это не проблема, в других языках нужен 64-bit тип).

Разберись руками

Берём пример n=7. За день i бегут i кругов, а в каждый 5-й день добавляют ещё 1 круг. Один круг — 400 метров.

Идея: Сначала посчитай, сколько кругов набегает по «лестнице» за первые дни (сумма 1, 2, 3, ... до n). Потом отдельно посчитай, сколько среди этих дней «каждый 5-й» — каждый такой день добавляет ровно один круг. Сложи круги и в конце переведи в метры умножением на 400.

Решить задачу с автопроверкой на Python →

Куда дальше