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

21. Выигрышная стратегия: часть 3: все задания

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

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

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

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

Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в двух кучах становится не менее $154$. Победителем считается игрок, сделавший последний ход, то есть первым получивший такую игровую позицию, при которой в двух кучах суммарно $154$ камня или больше. В начальный момент в первой куче $11$ камней, во второй куче – $S$ камней; $1 \leq S \leq 142$.

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

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

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

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

Проверка игрового дерева даёт подходящие значения $S=41,\ 42,\ 44$. Минимальное из них: $S=41$.

Рассмотрим $S=41$. После первого хода Пети возможны позиции: $(15;41),\ (11;45),\ (33;41),\ (11;123)$.

Если получено $(33;41)$ или $(11;123)$, Ваня выигрывает сразу.

Из позиций $(15;41)$ и $(11;45)$ Ваня переводит игру в позицию $(15;45)$.

После любого хода Пети получим: $(19;45),\ (15;49),\ (45;45),\ (15;135)$.

  • Из каждой позиции Ваня выигрывает одним ходом. Например:
  • $19+45\cdot3=154$,
  • $15+49\cdot3=162$,
  • $45\cdot3+45=180$,
  • $15+135+4=154$.

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

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

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

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

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

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

for S in range(1, 143):
    petya = moves(11, S)

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

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
2. Задание #295192
Задание было решено верно
Задание было решено неверно

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

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

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

Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в двух кучах становится не менее $176$. Победителем считается игрок, сделавший последний ход, то есть первым получивший такую игровую позицию, при которой в двух кучах суммарно $176$ камней или больше. В начальный момент в первой куче было 14 камней, во второй куче – $S$ камней; $1 \leq S \leq 161$.

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

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

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

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

Проверка игровых позиций показывает, что минимальное подходящее значение: $S=49$.

После первого хода Пети возможны позиции: $(17;49),\ (14;52),\ (42;49),\ (14;147)$.

Из позиций $(42;49)$ и $(14;147)$ Ваня выигрывает сразу.

Если Петя получает $(17;49)$ или $(14;52)$, Ваня своим ходом переводит игру в позицию $(17;52)$.

После любого хода Пети получим: $(20;52),\ (17;55),\ (51;52),\ (17;156)$.

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

  • $(20;52)\rightarrow(20;156)$, сумма $176$;
  • $(17;55)\rightarrow(17;165)$, сумма $182$;
  • $(51;52)\rightarrow(153;52)$, сумма $205$;
  • $(17;156)\rightarrow(20;156)$, сумма $176$.

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

Для $S<49$ Ваня не может гарантированно выиграть первым или вторым ходом при любой игре Пети.

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

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

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

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

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

for S in range(1, 162):
    petya = moves(14, S)

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

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
3. Задание #295198
Задание было решено верно
Задание было решено неверно

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

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

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

В начальный момент в куче было $S$ камней, $1 \leq S \leq 68$. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

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

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

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

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

У Пети есть два возможных хода.

Если Петя добавит один камень: $32\rightarrow33$.

Ваня получает $34$: $33\rightarrow34$.

После этого Петя может получить только $35$ или $68$, и Ваня выигрывает следующим ходом:

$35\rightarrow70$;
$68\rightarrow69$.

Если Петя удвоит кучу: $32\rightarrow64$, то Ваня выигрывает сразу: $64\rightarrow128$.

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

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

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

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

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

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

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

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

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
4. Задание #295201
Задание было решено верно
Задание было решено неверно

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

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

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

Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в двух кучах становится не менее $133$. Победителем считается игрок, сделавший последний ход, то есть первым получивший такую игровую позицию, при которой в двух кучах суммарно $133$ камня или больше. В начальный момент в первой куче было $17$ камней, во второй куче – $S$ камней; $1 \leq S \leq 115$.

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

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

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

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

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

После первого хода Пети возможны позиции:

$(21;44)$, $(17;48)$, $(34;44)$, $(17;88)$.

Если получена позиция $(17;88)$, Ваня выигрывает сразу: $(17;88)\rightarrow(17;176)$.

Из позиции $(21;44)$ Ваня получает $(42;44)$, из позиции $(17;48)$ — $(34;48)$, из позиции $(34;44)$ — $(34;48)$. После любого следующего хода Пети Ваня сможет выиграть своим вторым ходом.

Например, из $(42;44)$ Петя может получить: $(46;44)$, $(42;48)$, $(84;44)$, $(42;88)$, и из каждой такой позиции Ваня выигрывает следующим ходом.

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

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

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

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

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

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

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

for S in range(1, 116):
    petya = moves(17, S)

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

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
5. Задание #295204
Задание было решено верно
Задание было решено неверно

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

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

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

Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в двух кучах становится не менее $155$. Победителем считается игрок, сделавший последний ход, то есть первым получивший такую игровую позицию, при которой в двух кучах суммарно $155$ камней или больше. В начальный момент в первой куче было $15$ камней, во второй куче – $S$ камней; $1 \leq S \leq 139$.

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

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

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

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

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

После первого хода Пети возможны позиции:

$(16;45)$, $(15;46)$, $(45;45)$, $(15;135)$.

Из позиций $(45;45)$ и $(15;135)$ Ваня выигрывает сразу.

Из $(16;45)$ Ваня получает: $(16;45)\rightarrow(16;46)$.

Из $(15;46)$ Ваня также получает: $(15;46)\rightarrow(16;46)$.

После этого Петя может получить: $(17;46)$, $(16;47)$, $(48;46)$, $(16;138)$.

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

  • $(17;46)\rightarrow(17;138)$, сумма $155$;
  • $(16;47)\rightarrow(16;141)$, сумма $157$;
  • $(48;46)\rightarrow(144;46)$, сумма $190$;
  • $(16;138)\rightarrow(17;138)$, сумма $155$.

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

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

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

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

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

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

for S in range(1, 140):
    petya = moves(15, S)

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

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
6. Задание #295207
Задание было решено верно
Задание было решено неверно

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

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

Например, из кучи в $20$ камней за один ход можно получить кучу из $17$, $12$ или $6$ камней.

Игра завершается, когда количество камней в куче становится не более $16$. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из $16$ или менее камней. В начальный момент в куче было $S$ камней, $S \geq 17$.

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

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

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

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

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

После первого хода Пети возможны позиции: $57\rightarrow54,\ 49,\ 19$.

Если Петя получает $49$ или $19$ камней, Ваня выигрывает сразу:

$49\rightarrow16$;
$19\rightarrow6$.

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

После этого Петя может получить: $51\rightarrow48,\ 43,\ 17$.

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

$48\rightarrow16$;
$43\rightarrow14$;
$17\rightarrow5$.

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

Для $S=51$, $52$, $53$ Ваня гарантированно выигрывает первым ходом, а при $S=54$, $55$, $56$ Петя может первым ходом оставить соответственно $51$, $52$, $53$ камня, что не позволяет Ване гарантированно выиграть первым или вторым ходом.

Минимальное значение: $57$.

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

def moves(x):
    return [x - 3, x - 8, x // 3]

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

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

    return any(
        z > 16 and all(
            y > 16 and win1(y)
            for y in moves(z)
        )
        for z in moves(x)
    )

for S in range(17, 1000):
    if (
        all(x > 16 and win2(x) for x in moves(S))
        and not all(win1(x) for x in moves(S))
    ):
        print(S)
        break

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
7. Задание #295210
Задание было решено верно
Задание было решено неверно

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

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

Например, из кучи в $20$ камней за один ход можно получить кучу из $18$, $16$ или $6$ камней.

Игра завершается, когда количество камней в куче становится не более $17$. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из $17$ или менее камней. В начальный момент в куче было $S$ камней, $S \geq 18$.

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

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

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

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

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

После первого хода Пети возможны позиции: $60\rightarrow58,\ 56,\ 20$.

Если Петя оставил $20$ камней, Ваня выигрывает сразу: $20\rightarrow16$.

Если Петя оставил $58$ камней: $58\rightarrow54$.

Если Петя оставил $56$ камней: $56\rightarrow54$.

После позиции $54$ Петя может получить: $54\rightarrow52,\ 50,\ 18$.

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

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

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

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

def moves(x):
    return [x - 2, x - 4, x // 3]

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

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

    return any(
        z > 17 and all(
            y > 17 and win1(y)
            for y in moves(z)
        )
        for z in moves(x)
    )

for S in range(18, 1000):
    if (
        all(x > 17 and win2(x) for x in moves(S))
        and not all(win1(x) for x in moves(S))
    ):
        print(S)
        break

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
8. Задание #295215
Задание было решено верно
Задание было решено неверно

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

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

Например, из кучи в $20$ камней за один ход можно получить кучу из $17$, $13$ или $5$ камней.

Игра завершается, когда количество камней в куче становится не более $15$. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из $15$ или менее камней. В начальный момент в куче было $S$ камней, $S \geq 16$.

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

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

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

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

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

После первого хода Пети возможны позиции: $70\rightarrow67,\ 63,\ 17$.

Из позиций $63$ и $17$ Ваня выигрывает сразу:

$63\rightarrow15$;
$17\rightarrow14$.

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

После этого Петя может получить: $64\rightarrow61,\ 57,\ 16$.

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

$61\rightarrow15$;
$57\rightarrow14$;
$16\rightarrow13$.

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

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

def moves(x):
    return [x - 3, x - 7, x // 4]

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

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

    return any(
        z > 15 and all(
            y > 15 and win1(y)
            for y in moves(z)
        )
        for z in moves(x)
    )

for S in range(16, 1000):
    if (
        all(x > 15 and win2(x) for x in moves(S))
        and not all(win1(x) for x in moves(S))
    ):
        print(S)
        break

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
9. Задание #295220
Задание было решено верно
Задание было решено неверно

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

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

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

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

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

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

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

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

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

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

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

После первого хода Пети возможны позиции: $17\rightarrow18,\ 21,\ 51$.

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

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

Если Петя получил $21$ камень, Ваня также получает: $21\rightarrow22$.

После позиции $22$ Петя может получить: $22\rightarrow23,\ 26,\ 66$.

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

$23\rightarrow69$;
$26\rightarrow78$;
$66\rightarrow67$.

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

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

def moves(x):
    return [x + 1, x + 4, x * 3]

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

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

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

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

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
10. Задание #295221
Задание было решено верно
Задание было решено неверно

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

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

Например, из кучи в $20$ камней за один ход можно получить кучу из $18$, $16$ или $5$ камней.

Игра завершается, когда количество камней в куче становится не более $23$. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из $23$ или менее камней. В начальный момент в куче было $S$ камней, $S \geq 24$.

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

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

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

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

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

После первого хода Пети возможны позиции: $102\rightarrow100,\ 98,\ 25$.

Если Петя оставил $25$ камней, Ваня выигрывает сразу: $25\rightarrow23$.

Если Петя оставил $100$ камней: $100\rightarrow96$.

Если Петя оставил $98$ камней: $98\rightarrow96$.

После позиции $96$ Петя может получить: $96\rightarrow94,\ 92,\ 24$.

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

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

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

def moves(x):
    return [x - 2, x - 4, x // 4]

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

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

    return any(
        y > 23 and all(
            z > 23 and win1(z)
            for z in moves(y)
        )
        for y in moves(x)
    )

for S in range(24, 1000):
    if (
        all(x > 23 and win2(x) for x in moves(S))
        and not all(win1(x) for x in moves(S))
    ):
        print(S)
        break

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
11. Задание #295227
Задание было решено верно
Задание было решено неверно

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

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

Например, из кучи в $20$ камней за один ход можно получить кучу из $17$, $15$ или $5$ камней.

Игра завершается, когда количество камней в куче становится не более $30$. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из $30$ или менее камней. В начальный момент в куче было $S$ камней, $S \geq 31$.

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

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

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

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

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

После первого хода Пети возможны позиции: $132\rightarrow129,\ 127,\ 33$.

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

Если Петя оставил $129$ камней, Ваня делает ход: $129\rightarrow126$.

После этого Петя может получить: $126\rightarrow123,\ 121,\ 31$, и из каждой такой позиции Ваня выигрывает следующим ходом.

Если Петя оставил $127$ камней: $127\rightarrow124$.

После этого Петя может получить: $124\rightarrow121,\ 119,\ 31$, и Ваня снова выигрывает следующим ходом.

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

При $S=124,\ 125,\ 126$ Ваня гарантированно выигрывает первым ходом, а при $127\leq S\leq131$ Петя может оставить $124$, $125$ или $126$ камней, после чего Ваня не может гарантировать победу.

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

def moves(x):
    return [x - 3, x - 5, x // 4]

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

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

    return any(
        y > 30 and all(
            z > 30 and win1(z)
            for z in moves(y)
        )
        for y in moves(x)
    )

for S in range(31, 1000):
    if (
        all(x > 30 and win2(x) for x in moves(S))
        and not all(win1(x) for x in moves(S))
    ):
        print(S)
        break

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
12. Задание #295232
Задание было решено верно
Задание было решено неверно

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

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

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

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

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

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

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

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

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

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

После первого хода Пети возможны позиции:

$30\rightarrow31$;
$30\rightarrow60$.

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

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

После этого Петя может получить: $32\rightarrow33$ или $32\rightarrow64$.

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

$33\rightarrow66$;
$64\rightarrow128$.

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

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

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

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

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

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

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

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
13. Задание #295236
Задание было решено верно
Задание было решено неверно

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

После позиции $28$ Петя может получить: $28\rightarrow29,\ 32,\ 56$.

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

$29\rightarrow58$;
$32\rightarrow64$;
$56\rightarrow60$.

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

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

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

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

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

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

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

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
14. Задание #295262
Задание было решено верно
Задание было решено неверно

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

За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

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

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

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

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

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

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

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

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

После первого хода Пети возможны позиции: $(8;32)$, $(7;33)$, $(14;32)$, $(7;64)$.

Из позиции $(7;64)$ Ваня выигрывает сразу: $(7;64)\rightarrow(7;128)$.

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

После этого Петя может получить: $(17;32)$, $(16;33)$, $(32;32)$, $(16;64)$.

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

Если Петя получил $(7;33)$ или $(14;32)$, Ваня переводит игру в позицию $(14;33)$, после которой также гарантированно выигрывает своим вторым ходом.

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

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

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

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

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

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

for S in range(1, 74):
    petya = moves(7, S)

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

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
15. Задание #295266
Задание было решено верно
Задание было решено неверно

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

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

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

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

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

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

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

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

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

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

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

После первого хода Пети возможны позиции: $20\rightarrow21,\ 24,\ 40$.

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

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

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

После позиции $25$ Петя может получить: $25\rightarrow26,\ 29,\ 50$.

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

$26\rightarrow52$;
$29\rightarrow58$;
$50\rightarrow51$.

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

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

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

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

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

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

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

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
16. Задание #295270
Задание было решено верно
Задание было решено неверно

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

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

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

Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в двух кучах становится не менее $169$. Победителем считается игрок, сделавший последний ход, то есть первым получивший такую игровую позицию, при которой в двух кучах суммарно $169$ камней или больше. В начальный момент в первой куче было $14$ камней, во второй куче – $S$ камней; $1 \leq S \leq 154$.

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

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

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

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

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

После первого хода Пети возможны позиции: $(16;68),\ (14;70),\ (28;68),\ (14;136)$.

Если Петя получил $(14;136)$, Ваня выигрывает сразу.

Из позиции $(16;68)$ Ваня получает: $(16;68)\rightarrow(32;68)$.

После этого Петя может получить: $(34;68),\ (32;70),\ (64;68),\ (32;136)$.

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

  • $(34;68)\rightarrow(34;136)$, сумма $170$;
  • $(32;70)\rightarrow(32;140)$, сумма $172$;
  • $(64;68)\rightarrow(64;136)$, сумма $200$;
  • $(32;136)\rightarrow(34;136)$, сумма $170$.

Из позиций $(14;70)$ и $(28;68)$ Ваня переводит игру в позицию $(28;70)$, после которой также гарантированно выигрывает своим вторым ходом.

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

Ответ: $68$.

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

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

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

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

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

for S in range(1, 155):
    petya = moves(14, S)

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

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
17. Задание #295274
Задание было решено верно
Задание было решено неверно

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

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

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

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

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

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

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

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

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

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

После первого хода Пети возможны позиции:

$16\rightarrow17$;
$16\rightarrow32$.

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

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

После этого Петя может получить: $18\rightarrow19$ или $18\rightarrow36$.

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

$19\rightarrow38$;
$36\rightarrow72$.

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

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

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

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

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

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

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

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
18. Задание #295278
Задание было решено верно
Задание было решено неверно

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

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

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

Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в двух кучах становится не менее $135$. Победителем считается игрок, сделавший последний ход, то есть первым получивший такую игровую позицию, при которой в двух кучах суммарно $135$ камней или больше. В начальный момент в первой куче было $13$ камней, во второй куче – $S$ камней; $1 \leq S \leq 121$.

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

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

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

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

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

После первого хода Пети возможны позиции: $(16;50),\ (13;53),\ (26;50),\ (13;100)$.

Из позиции $(13;100)$ Ваня выигрывает сразу.

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

После этого Петя может получить: $(35;50),\ (32;53),\ (64;50),\ (32;100)$.

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

Если Петя получил $(13;53)$, Ваня получает: $(13;53)\rightarrow(26;53)$.

Если Петя получил $(26;50)$, Ваня также получает: $(26;50)\rightarrow(26;53)$.

После позиции $(26;53)$ Ваня гарантированно выигрывает своим вторым ходом.

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

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

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

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

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

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

for S in range(1, 122):
    petya = moves(13, S)

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

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
19. Задание #295282
Задание было решено верно
Задание было решено неверно

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

За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в три раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

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

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

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

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

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

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

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

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

После первого хода Пети возможны позиции: $(7;18),\ (6;19),\ (18;18),\ (6;54)$.

Из позиций $(18;18)$ и $(6;54)$ Ваня выигрывает сразу.

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

Если Петя получил $(6;19)$, Ваня также получает: $(6;19)\rightarrow(7;19)$.

После позиции $(7;19)$ Петя может получить: $(8;19),\ (7;20),\ (21;19),\ (7;57)$.

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

  • $(8;19)\rightarrow(8;57)$, сумма $65$;
  • $(7;20)\rightarrow(7;60)$, сумма $67$;
  • $(21;19)\rightarrow(63;19)$, сумма $82$;
  • $(7;57)\rightarrow(8;57)$, сумма $65$.

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

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

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

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

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

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

for S in range(1, 59):
    petya = moves(6, S)

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

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

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

Показать
Очки опыта 20
Спросить Зави
Сообщить о проблеме
20. Задание #295287
Задание было решено верно
Задание было решено неверно

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

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

Например, из кучи в $20$ камней за один ход можно получить кучу из $17$, $15$ или $5$ камней.

Игра завершается, когда количество камней в куче становится не более $10$. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из $10$ или менее камней. В начальный момент в куче было $S$ камней, $S \geq 11$.

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

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

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

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

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

После первого хода Пети возможны позиции: $52\rightarrow49,\ 47,\ 13$.

Если Петя оставил $13$ камней, Ваня выигрывает сразу: $13\rightarrow10$.

Если Петя оставил $49$ камней, Ваня делает ход: $49\rightarrow44$.

Если Петя оставил $47$ камней: $47\rightarrow44$.

После позиции $44$ Петя может получить: $44\rightarrow41,\ 39,\ 11$.

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

$41\rightarrow10$;
$39\rightarrow9$;
$11\rightarrow8$.

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

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

Ответ: $52$.

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

def moves(x):
    return [x - 3, x - 5, x // 4]

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

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

    return any(
        y > 10 and all(
            z > 10 and win1(z)
            for z in moves(y)
        )
        for y in moves(x)
    )

for S in range(11, 1000):
    if (
        all(x > 10 and win2(x) for x in moves(S))
        and not all(win1(x) for x in moves(S))
    ):
        print(S)
        break

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

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

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