Журнал турнира: очки, серии и техпоражения
Условие
В школьном турнире по настольному теннису секретарь ведёт журнал событий по одному игроку. По каждой записи нужно обновлять его статистику.
Правила журнала:
win— победа: игрок получает +3 очка и увеличивает текущую серию побед.loss— поражение: очки не меняются, текущая серия побед обрывается.tech— техническое поражение: игрок получает −2 очка, текущая серия побед обрывается, и счётчик техпоражений увеличивается.
Нужно вывести итоговый отчёт после всех записей.
Формат ввода:
- В первой строке целое число
n— количество записей. - Далее идут
nстрок, в каждой одна строка:win,lossилиtech.
Формат вывода: Выведите ровно 4 строки:
очки: Xпобеды: Yлучшая серия: Zтехпоражения: W
Ограничения:
1 ≤ n ≤ 200- Очки могут стать отрицательными — это нормально.
- Во входе встречаются только строки
win,loss,tech.
Пример Ввод:
7
win
win
loss
win
tech
win
win
Вывод:
очки: 13
победы: 5
лучшая серия: 2
техпоражения: 1Как решать — идея подхода
Приём: Симуляция (подсчёт статистики по событиям)
Ключевое наблюдение: каждая строка журнала влияет на итог только через текущее состояние игрока. Значит, ничего «назад» пересчитывать не нужно — достаточно один раз пройти события и обновлять несколько переменных.
Приём: симуляция (пошаговое обновление состояния). Он работает, потому что правила для win/loss/tech локальные: новое значение очков, побед, техпоражений и серии зависит только от предыдущих значений и текущей записи.
Что хранить:
points— очки (может стать отрицательным, это нормально);wins— количество побед;techs— количество техпоражений;cur_streak— текущая серия побед подряд;best_streak— максимальная серия за всё время.
План:
- Считать
n. - Инициализировать все счётчики нулями.
- Для каждой из
nстрок: - если
win:points += 3,wins += 1,cur_streak += 1, обновить максимум; - если
loss: обнулитьcur_streak; - если
tech:points -= 2,techs += 1, обнулитьcur_streak. - Вывести 4 строки ровно в нужном формате.
Мини-сниппет для обновления лучшей серии: best_streak = max(best_streak, cur_streak).
Сложность: O(n) по времени и O(1) по памяти.
Частая ошибка: забыть сбрасывать cur_streak и при loss, и при tech, или обновлять best_streak не сразу после увеличения серии.
Решить задачу с автопроверкой на Python →
Куда дальше
- Школьный этап ВсОШ по информатике — как устроен первый этап и план подготовки за четыре недели
- На программиста по олимпиаде: путь по классам — что даёт диплом, куда с ним берут на ИТ-направления и почему решает 9 класс
- Вердикты судьи: WA, TLE, RE, PE, CE — что значит каждый код проверяющей системы и где искать причину