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

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

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

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

За один ход игрок может:
– добавить в одну из куч (по своему выбору) $2$ камня;
– увеличить количество камней в одной из куч (по своему выбору) в $3$ раза.

Например, пусть в одной куче $20$ камней, а в другой $30$ камней; такую позицию в игре обозначим $(20, 30)$. Тогда за один ход можно получить любую из четырёх позиций: $(22, 30)$, $(20, 32)$, $(60, 30)$, $(20, 90)$.

Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в двух кучах становится не менее $97$. Победителем считается игрок, сделавший последний ход, то есть первым получивший такую игровую позицию, при которой в двух кучах суммарно $97$ камней или больше.

В начальный момент в первой куче было $8$ камней, во второй куче – $S$ камней; $1 \leq S \leq 88$.

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

Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети.

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

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

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

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

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

После первого хода Пети возможны позиции: $(10;28),\ (8;30),\ (24;28),\ (8;84)$.

Из позиций $(8;30)$, $(24;28)$ и $(8;84)$ Ваня выигрывает сразу:

$(8;30)\rightarrow(8;90)$, сумма $98$;
$(24;28)\rightarrow(72;28)$, сумма $100$;
$(8;84)\rightarrow(24;84)$, сумма $108$.

Если Петя получил $(10;28)$, Ваня делает ход: $(10;28)\rightarrow(12;28)$.

После этого Петя может получить: $(14;28),\ (12;30),\ (36;28),\ (12;84)$.

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

  • $(14;28)\rightarrow(14;84)$, сумма $98$;
  • $(12;30)\rightarrow(12;90)$, сумма $102$;
  • $(36;28)\rightarrow(108;28)$, сумма $136$;
  • $(12;84)\rightarrow(14;84)$, сумма $98$.

При этом после хода Пети $(8;28)\rightarrow(10;28)$ Ваня не может выиграть сразу, поэтому гарантированной победы первым ходом у него нет.

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

def moves(a, b):
    return [(a + 2, b), (a, b + 2),
            (a * 3, b), (a, b * 3)]

def win1(a, b):
    return a + b < 97 and any(
        x + y >= 97 for x, y in moves(a, b)
    )

def win2(a, b):
    if win1(a, b):
        return True

    return any(
        all(
            x + y < 97 and win1(x, y)
            for x, y in moves(c, d)
        )
        for c, d in moves(a, b)
        if c + d < 97
    )

for S in range(1, 89):
    petya = moves(8, S)

    if (
        all(a + b < 97 and win2(a, b) for a, b in petya)
        and not all(win1(a, b) for a, b in petya)
    ):
        print(S)
        break

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

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

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

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