Ctrl K

Вперёд после передачи хода

Средняя
Двое игроков проходят цепочку из n этапов. Массив stages описывает этапы: stages[i] == 1 — этап проходимый, stages[i] == 0 — его не пройти никому. За пройденный этап игрок получает 1 очко, за проваленный теряет 1 очко. Сначала первый игрок проходит несколько этапов подряд, начиная с этапа 0, затем второй игрок проходит все оставшиеся. Каждый должен сыграть хотя бы один этап. Оба играют в полную силу, то есть проходят каждый проходимый этап. Верните наименьшее число этапов, которое должен взять первый игрок, чтобы набрать строго больше очков, чем второй. Если это невозможно, верните -1.
Пример 1
stages=[0, 1, 1, 0, 1] → 3

Первый игрок берёт 1 этап: у него -1, у второго 1 + 1 - 1 + 1 = 2. Берёт 2: у него 0, у второго 1. Берёт 3: у него 1, у второго 0 — впервые больше. Ответ 3.

Пример 2
stages=[1, 1] → -1

Каждый может пройти только один этап, счёт 1 : 1 — вырваться вперёд нельзя.

Пример 3
stages=[1, 0, 0] → 1

Уже после одного этапа счёт 1 : -2.

Ограничения
  • 2 ≤ len(stages) ≤ 10⁵
  • stages[i] равно 0 или 1
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамый короткий рывок СредняяПроизведение всех остальных СредняяСтудии для записи СредняяСамый длинный отрезок с заданной суммой СредняяПакет правок на отрезках Средняя
загружаем Python…
Вход
stages=[0, 1, 1, 0, 1]
Ожидается
3

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 117 тестов на сервере, включая скрытые.