Благотворительные круги на стадионе
Условие
В школьной легкоатлетической секции тренер ведёт «лестницу кругов» на стадионе.
- В день 1 ребята бегут 1 круг.
- В день 2 — 2 круга.
- ...
- В день *i* — *i* кругов.
Стадион стандартный: 1 круг = 400 метров.
Но есть традиция: в каждый 5‑й день (5, 10, 15, ...) после основной тренировки добавляют ещё 1 круг в поддержку благотворительного забега.
Сколько метров пробегут ребята за первые n дней?
Формат ввода
Одно целое число n.
Формат вывода
Одно целое число — сколько метров пробегут за первые n дней.
Ограничения
1 ≤ n ≤ 1 000 000 000- Ответ может не помещаться в 32-битный тип (как на олимпиадах), используйте 64-битные вычисления.
Пример
Ввод:
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 м.
План решения:
- Прочитать n.
- Посчитать
base = n*(n+1)//2— круги по лестнице. - Посчитать
bonus = n//5— сколько дней 5,10,15,... попало в первые n. - Найти
laps = base + bonus. - Ответ:
laps*400.
Сложность: O(1) по времени и O(1) по памяти.
Частая ошибка: неверно считать бонус как n/5 (обычное деление) или пытаться проверять каждый день циклом — это не пройдёт по времени при больших n. Также не забудьте про целочисленное // и что ответ может быть большим (в Python это не проблема, в других языках нужен 64-bit тип).
Разберись руками
Берём пример n=7. За день i бегут i кругов, а в каждый 5-й день добавляют ещё 1 круг. Один круг — 400 метров.
- Сначала посчитай, сколько кругов набежит по основному плану за 7 дней: 1+2+3+4+5+6+7 = ?
- Теперь отметь дни от 1 до 7, которые являются каждым 5-м днём (5, 10, 15, ...), то есть дают +1 круг сверху.
- Сколько всего кругов получится за 7 дней, если к 28 основным добавить по 1 кругу за каждый отмеченный «5-й день»?
- Переведи круги в метры: если 1 круг = 400 м, то сколько метров это будет для 29 кругов?
Идея: Сначала посчитай, сколько кругов набегает по «лестнице» за первые дни (сумма 1, 2, 3, ... до n). Потом отдельно посчитай, сколько среди этих дней «каждый 5-й» — каждый такой день добавляет ровно один круг. Сложи круги и в конце переведи в метры умножением на 400.
Решить задачу с автопроверкой на Python →
Куда дальше
- Школьный этап ВсОШ по информатике — как устроен первый этап и план подготовки за четыре недели
- Родителям: подготовка бесплатно — сколько стоит репетитор, что даёт бесплатный маршрут и как понять, что ребёнок занимается
- БВИ и льготы при поступлении — какой диплом что даёт и сколько лет он действует