Подготовка к школе
1 класс
2 класс
3 класс
4 класс
5 класс
6 класс
7 класс
8 класс
9 класс
10 класс
11 класс
ОГЭ
ЕГЭ
Для всех
Назад

21. Выигрышная стратегия: часть 3: #295313

Сообщить о проблеме
Задание #295313
Задание было решено верно
Задание было решено неверно

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя.

За один ход игрок может добавить в кучу $2$ или $5$ камней либо увеличить количество камней в куче в $2$ раза. У каждого игрока есть неограниченное количество камней, чтобы делать ходы.

Игра завершается в тот момент, когда количество камней в куче становится не менее $61$.

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

В начальный момент в куче было $S$ камней; $1 \leq S \leq 60$.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

Для игры, описанной в задании $19$, найдите минимальное значение $S$, при котором одновременно выполняются два условия:

  • у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
  • у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

Если найдено несколько значений $S$, в ответе запишите наименьшее из них.

Первый способ – математическое решение

Минимальное подходящее значение: $S=22$.

После первого хода Пети возможны позиции: $22\rightarrow24,\ 27,\ 44$.

Если Петя получил $44$ камня, Ваня выигрывает сразу: $44\rightarrow88$.

Если Петя получил $24$ камня, Ваня делает ход: $24\rightarrow29$.

Если Петя получил $27$ камней, Ваня также получает: $27\rightarrow29$.

После позиции $29$ Петя может получить: $29\rightarrow31,\ 34,\ 58$.

Из каждой такой позиции Ваня выигрывает следующим ходом:

$31\rightarrow62$;
$34\rightarrow68$;
$58\rightarrow63$.

При этом после хода Пети $22\rightarrow24$ Ваня не может выиграть сразу, поэтому гарантированной победы первым ходом у него нет.

Для $S<22$ оба условия одновременно не выполняются.

Второй способ – решение с помощью Python

def moves(x):
    return [x + 2, x + 5, x * 2]

def win1(x):
    return x < 61 and any(
        y >= 61 for y in moves(x)
    )

def win2(x):
    if win1(x):
        return True

    return any(
        y < 61 and all(
            z < 61 and win1(z)
            for z in moves(y)
        )
        for y in moves(x)
    )

for S in range(1, 61):
    if (
        all(x < 61 and win2(x) for x in moves(S))
        and not all(win1(x) for x in moves(S))
    ):
        print(S)
        break

Программа проверяет, что после любого хода Пети Ваня может выиграть первым или вторым ходом, но не может гарантированно выиграть своим первым ходом.

Программа выведет: $22$.

Показать
Очки опыта 20
Спросить Зави
0 заданий сегодня

Предложить улучшение