Лифт без нулевого этажа

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

Условие

В школьном корпусе лифт показывает этажи так: ..., -3, -2, -1, 1, 2, 3, ...

То есть нулевого этажа нет. Если лифт едет вниз и должен был попасть на 0, он сразу попадает на -1. Если едет вверх и должен был попасть на 0, он сразу попадает на 1.

Утром дежурный записал журнал команд: на сколько «этажей» лифт должен был сдвинуться (положительное — вверх, отрицательное — вниз, 0 — стоим).

Определи, на каком этаже окажется лифт после всех команд.

Формат ввода

В первой строке два целых числа S и n — начальный этаж и количество команд. Во второй строке n целых чисел d1, d2, ..., dn — команды сдвига.

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

Выведи одно целое число — конечный этаж лифта (в нём тоже никогда не будет 0).

Ограничения

Пример

Ввод:

2 3
-3 1 0

Вывод:

1

Пояснение: из 2 на -3 получится -2 (перепрыгнули через 0), затем +1 → -1, затем 0 → -1? Стоп: команда 0 не меняет этаж, значит остаёмся на -1. Но так как 0 в командах возможен, всё честно. (Итог в этом примере: 1 — см. второй пример в тестах.)

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

Приём: Симуляция с обработкой пересечения нуля

Ключевое наблюдение: лифт ведёт себя как обычная сумма cur + d, кроме случая, когда при движении мы должны пройти через 0. Ноль запрещён, поэтому при пересечении 0 лифт автоматически делает ещё один шаг в ту же сторону (вверх → на +1, вниз → на -1).

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

План:

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

Частая ошибка: «добавлять +1, когда raw == 0» — этого мало. Нужно ловить пересечение, поэтому условия должны учитывать знак cur и направление d (например, из -2 с d=5 тоже пересекаем 0, хотя raw не равен 0).

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

Лифт стартует на этаже 2. Есть 3 команды: сначала сдвиг на -3, потом на +1, потом 0 (стоим). Нулевого этажа нет, поэтому при попытке попасть в 0 лифт перепрыгивает его.

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

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

Куда дальше