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

19. Выигрышная стратегия: часть 1: #295308

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

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

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

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

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

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

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

Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение $S$, при котором такая ситуация возможна.

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

Чтобы получить минимальное $S$, Петя и Ваня должны максимально увеличивать вторую кучу — умножать её на $3$: $(8;S)\rightarrow(8;3S)\rightarrow(8;9S)$.

Для победы Вани:

$8+9S\geq97$,
$9S\geq89$,
$S\geq9{,}88\ldots$

Минимальное целое значение $S=10$.

Проверка: $(8;10)\rightarrow(8;30)\rightarrow(8;90)$.

После хода Пети сумма равна $38<97$, а после хода Вани: $8+90=98\geq97$.

Ответ: $10$.

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

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

for S in range(1, 89):
    if any(
        a + b < 97 and
        any(x + y >= 97 for x, y in moves(a, b))
        for a, b in moves(8, S)
    ):
        print(S)
        break

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

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

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

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