Ctrl K

Бери до трёх карт

Сложная
Карты лежат в ряд, на каждой написано целое число (возможно, отрицательное) — массив cards. Алиса и Боб ходят по очереди, первой ходит Алиса. За ход игрок забирает одну, две или три карты с начала ряда, и числа на них прибавляются к его очкам. Игра заканчивается, когда карт не осталось; у обоих в начале по 0 очков. Оба играют оптимально, стараясь набрать больше соперника. Верните "Alice", если побеждает Алиса, "Bob", если Боб, и "Tie", если очков у них поровну.
Пример 1
cards=[4, -2, 5, 1] → 'Alice'

Алиса берёт три карты (4 − 2 + 5 = 7), Бобу остаётся 1. Можно проверить, что лучше у Алисы не выйдет, а Боб ей не помешает.

Пример 2
cards=[-3, 6, 2, 1] → 'Alice'

Как бы Алиса ни начала, ей приходится брать −3. Если она возьмёт все три первые карты (5 очков), Боб возьмёт 1 — Алиса впереди. Ответ Alice.

Пример 3
cards=[5, -1, -1, 9] → 'Bob'

Сколько бы карт ни взяла Алиса, Боб забирает весь остаток вместе с девяткой: 5 против 7, 4 против 8 или 3 против 9. Побеждает Боб.

Ограничения
  • 1 ≤ len(cards) ≤ 5 · 10⁴
  • -1000 ≤ cards[i] ≤ 1000
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиОстаётся лёгкая половина СложнаяМышь, кот и сыр СложнаяСлияние плиток спереди СложнаяДуэль за крайние карты СредняяДуэль за крайние кучки Средняя
загружаем Python…
Вход
cards=[4, -2, 5, 1]
Ожидается
'Alice'

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