Смена в прокате коньков

тема: Моделирование процессов · уровень: средний

Условие

В пункте проката коньков идёт смена. За смену фиксируют события: кто-то пытается взять пару, кто-то возвращает.

Пары коньков одинаковые, важны только количества: сколько пар всего, сколько сейчас занято, сколько денег в кассе, сколько было отказов и какой максимум занятых пар случался за смену.

Правила событий:

Нужно вывести итоговый отчёт.

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

Формат вывода: Выведите ровно 3 строки:

Ограничения:

Пример: Ввод:

2
100
6
take
take
take
back
back
back

Вывод:

касса: 200
отказы: 1
максимум занятых: 2

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

Приём: Симуляция (пошаговое моделирование)

Ключевое наблюдение: пары коньков не отличаются, поэтому состояние проката в любой момент описывается всего несколькими числами — сколько пар занято сейчас, сколько денег в кассе, сколько было отказов и какой максимум занятых встречался. Значит, можно просто «проиграть» все события по очереди.

Приём: симуляция (пошаговое моделирование). Он работает, потому что каждое событие зависит только от текущего состояния, а ограничения маленькие (n до 200), так что один проход хватит.

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

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

Частая ошибка: уменьшать busy на back, даже когда busy == 0 (получится отрицательная занятость). Ещё одна — обновлять max_busy не после успешного take, а всегда.

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

Куда дальше