Тема 19. Теория игр
19.02 Перекладывание камней две кучи
Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела теория игр
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 1#78635

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

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

В начальный момент в первой куче было 10 камней, во второй куче – S камней; 1 ≤ S ≤ 175. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Показать ответ и решение
from functools import lru_cache
lru_cache(None)
def f(a, b, c=0):
    if a + b >= 186:
        return 0
    if c > 5:
        return 1000
    t = [f(a+7, b, c+1), f(a+11, b, c+1), f(a*2, b, c+1), f(a, b*2, c+1), f(a, b+7, c+1),f(a, b+11, c+1)]
    n = [i for i in t if i <= 0]
    if n:
        return -max(n) + 1
    return -max(t)

a = []
for i in range(1, 176):
    if f(10, i) == 1:
        a.append(i)
print(min(a))

Ответ: 88

Ошибка.
Попробуйте повторить позже

Задача 2#78632

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

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

В начальный момент в первой куче было 9 камней, во второй куче – S камней; 1 ≤ S ≤ 196. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Показать ответ и решение
from functools import lru_cache
lru_cache(None)
def f(a, b, c=0):
    if a + b >= 205:
        return 0
    if c > 5:
        return 1000
    if a > b:
        t = [f(a, b + a, c + 1), f(a, b * 2, c + 1)]
    else:
        t = [f(a + b, b, c + 1), f(a * 2, b, c + 1)]
    n = [i for i in t if i <= 0]
    if n:
        return -max(n) + 1
    return -max(t)

for i in range(1, 197):
    if f(9, i) == 1:
        print(i)

Ответ: 98

Ошибка.
Попробуйте повторить позже

Задача 3#78629

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

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

В начальный момент в первой куче было 15 камней, во второй куче – S камней; 1 ≤ S ≤ 152.

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

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

Показать ответ и решение
from functools import lru_cache
lru_cache(None)
def f(a, b, c=0):
    if a + b >= 169:
        return 0
    if c > 5:
        return 1000
    t = [f(a+4, b, c+1), f(a*2, b, c+1), f(a*3, b, c+1), f(a, b+4, c+1), f(a, b*2, c+1), f(a, b*3, c+1)]
    n = [i for i in t if i <= 0]
    if n:
        return -max(n) + 1
    return -max(t)

for i in range(1, 154):
    if f(15, i) == -1:
        print(i)

Ответ: 50

Ошибка.
Попробуйте повторить позже

Задача 4#78626

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

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

В начальный момент в первой куче было 13 камней, во второй куче – S камней; 1 ≤ S ≤ 110.

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

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

Показать ответ и решение
from functools import lru_cache
lru_cache(None)
def f(a, b, c=0):
    if a + b >= 124:
        return 0
    if c > 5:
        return 1000
    t = [f(a+1, b, c+1), f(a+3, b, c+1), f(a+b, b, c+1), f(a, b+1, c+1), f(a, b+3, c+1), f(a, b+a, c+1)]
    n = [i for i in t if i <= 0]
    if n:
        return -max(n) + 1
    return -max(t)

for i in range(1, 111):
    if f(13, i) == -1:
        print(i)

Ответ: 55

Ошибка.
Попробуйте повторить позже

Задача 5#76991

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в любую кучу два камня или увеличить количество камней в любой куче в три раза. Игра завершается в тот момент, когда сумма камней в кучах становится не менее 50. В начальный момент в первой куче было S камней, а во второй – P камней, 1 ≤ S ≤ 39,1 ≤ P ≤ 39  .

Сколько существует пар (S; P), таких что Ваня выигрывает первым ходом при любой игре Пети?

Показать ответ и решение
from functools import lru_cache
@lru_cache(None)
def f(a, b):
    if a + b >= 50:
        return 0
    h = [f(a + 2, b), f(a * 3, b),f(a, b + 2),f(a, b * 3)]
    t = [i for i in h if i <= 0]
    if t:return -max(t)+1
    return -max(h)
c = 0
for i in range(1, 40):
    for j in range(1, 40):
        if f(i, j) == -1:
            print(i, j)
            c += 1
print(c)

Ответ: 18

Ошибка.
Попробуйте повторить позже

Задача 6#72442

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в три раза. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 122. Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, при которой в кучах будет 122 или больше камней. В начальный момент в первой куче было 7 камней, во второй куче – S камней; 1 ≤ S ≤ 114  .

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

Показать ответ и решение
from functools import lru_cache
@lru_cache(None)
def f(a,b):
    if a + b >= 122:return 0
    m = [f(a+1,b),f(a*3,b),f(a,b+1),f(a,b*3)]
    n = [i for i in m if i <= 0]
    if n:return -max(n)+1
    return -max(m)
for i in range(1,115):
    if f(7,i) == -1:
        print(i)

Ответ: 38

Ошибка.
Попробуйте повторить позже

Задача 7#72420

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 60. Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, при которой в кучах будет 60 или больше камней. В начальный момент в первой куче было 10 камней, во второй куче – S камней; 1 ≤ S ≤ 49  .

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

Показать ответ и решение
from functools import lru_cache
@lru_cache(None)
def f(a,b):
    if a+b >= 60:return 0
    m = [f(a+1,b),f(a*2,b),f(a,b+1),f(a,b*2)]
    t = [i for i in m if i <= 0]
    if t:return -max(t)+1
    return -max(m)
c = 0
for i in range(1,50):
    if f(10,i) == -1:
        c += 1
print(c)

Ответ: 0

Ошибка.
Попробуйте повторить позже

Задача 8#71638

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

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

В начальный момент в первой куче было 3 камня, во второй куче – S камней; 1 ≤ S ≤ 204. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Показать ответ и решение
from functools import lru_cache
lru_cache(None)
def f(a,b,c = 0):
    if a+b >= 210:
        return 0
    if c > 8:
        return 1000000
    t = [f(a+5, b, c+1),f(a**2, b, c+1),f(a, b**2, c+1),f(a, b+5, c+1)]
    n = [i for i in t if i <= 0]
    if n:
        return -max(n) + 1
    return -max(t)

a = []
for i in range(1,204+1):
    if f(3,i) == 1:
        a.append(i)
print(min(a))

Ответ: 15

Ошибка.
Попробуйте повторить позже

Задача 9#71635

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

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

В начальный момент в первой куче было 5 камня, во второй куче – S камней; 1 ≤ S ≤ 88. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Показать ответ и решение
from functools import lru_cache
lru_cache(None)
def f(a,b,c = 0):
    if a+b >= 190:
        return 0
    if c > 8:
        return 1000
    if a > b:
        t = [f(a, b + a, c+1),f(a, b**2, c+1)]
    else:
        t = [f(a + b, b, c+1),f(a**2, b, c+1)]
    n = [i for i in t if i <= 0]
    if n:
        return -max(n) + 1
    return -max(t)

for i in range(1,89):
    if f(5,i) == -1:
        print(i)

Ответ: 14

Ошибка.
Попробуйте повторить позже

Задача 10#71632

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

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

В начальный момент в первой куче было 44 камня, во второй куче – S камней; 1 ≤ S ≤ 188.

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

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

Показать ответ и решение
from functools import lru_cache
lru_cache(None)
def f(a,b,c = 0):
    if a+b >= 260:
        return 0
    if c > 5:
        return 1000
    t = [f(a+10, b, c+1), f(a*2, b, c+1),f(a*4, b, c+1),  f(a, b+10, c+1),f(a, b*2, c+1),f(a, b*4, c+1)]
    n = [i for i in t if i <= 0]
    if n:
        return -max(n) + 1
    return -max(t)

a = []
for i in range(1,189):
    if f(44,i) == 1:
        a.append(i)
print(min(a))

Ответ: 54

Ошибка.
Попробуйте повторить позже

Задача 11#71629

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

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

В начальный момент в первой куче было 10 камней, во второй куче – S камней; 1 ≤ S ≤ 78.

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

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

Показать ответ и решение
from functools import lru_cache
lru_cache(None)
def f(a,b,c = 0):
    if a+b >= 98:
        return 0
    if c > 5:
        return 1000
    t = [f(a+2, b, c+1), f(a+3, b, c+1), f(a + b,b, c+1), f(a, b+3, c+1),f(a, b+2, c+1), f(a, b+a, c+1)]
    n = [i for i in t if i <= 0]
    if n:
        return -max(n) + 1
    return -max(t)

for i in range(1,79):
    if f(10,i) == -1:
        print(i)

Ответ: 43

Ошибка.
Попробуйте повторить позже

Задача 12#71626

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

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

В начальный момент в первой куче было 25 камней, во второй куче – S камней; 1 ≤ S ≤ 99.

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

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

Показать ответ и решение
from functools import lru_cache
lru_cache(None)
def f(a,b,c = 0):
    if a+b >= 140:
        return 0
    if c > 5:
        return 1000
    t = [f(a+5, b, c+1), f(a*2, b, c+1),  f(a, b+5, c+1),f(a, b*2, c+1)]
    n = [i for i in t if i <= 0]
    if n:
        return -max(n) + 1
    return -max(t)

count = 0
for i in range(1,100):
    if f(25,i) == -1:
        count += i
print(count)

Ответ: 168

Ошибка.
Попробуйте повторить позже

Задача 13#63928

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

В начальный момент в первой куче было 5 камней, во второй куче - S камней, 1 < S < 43. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Показать ответ и решение

Решение "руками":

На бумаге:

Минимальное значение во второй куче, при котором игра завершается — 49-5=44. Максимальный ход, который мы имеем в игре — *3, следовательно, промежуток, при котором игрок побеждает одним ходом, располагается от 15 до 44.

Умножаем 15 на 3, получаем 45. Для того, чтобы оказаться в выигрышной позиции, нам нужно, чтобы значение камней во второй куче было равно минимум 49-45=4. Ответ — 4.

Excel:

Откройте Excel, в ячейке С1 введите "49 число выигрышных камней. Постройте таблицу для всех возможных ходов. В ячейке A5 записываем начальное количество камней в первой куче - "5". В ячейке B5 будем изменять количество камней. В ячейки C5:D8 вносим ходы Пети (+1 и *3): С5=A5+1, С6=A5, С7=A5*3, С8=A5, D5=B5, D6=B5+1, D7=B5, D8=B5*3.

В ячейках E5:E8 формируем ходы Вани. Задача Вани - максимизировать количество камней в куче для ускорения победы. Оптимальный ход - умножить на 3 кучу с большим количеством камней и добавить вторую. Поэтому E5=MAX(C5:D5)*3+MIN(C5:D5).

Для удобства отслеживания победных ходов используем условное форматирование. Выделяем ячейку E5, переходим в "Условное форматирование "Правила выделения ячеек "другие правила и применяем правило подсветки ячейки зеленым при условии победы.

Протянем ячейку Е5 c формулой и форматированием до ячейки Е8.

Теперь в ячейку B5 можно вводить различные значения и анализировать возможные исходы игры. Заметим, при B5=4, у нас впервые «загорается» одна ячейка зеленым – это означает выигрыш. Петя создает кучу (15,4) – совершает неудачный ход, что приводит к победе Вора, формирующего выигрышную комбинацию с суммой 49.

PIC

Решение с помощью программы:

from functools import lru_cache
@lru_cache(maxsize=None)
def f(n,m) :
    if n+m >= 49 :
        return 0
    s = [f(n+1,m), f(n*3,m), f(n,m+1), f(n,m*3)]
    t = [x for x in s if x <= 0]
    if t :
        return -max(t) + 1
    else :
        return -max(s)
res = set()
for s in range(1, 49 + 1) :
    if f(5 + 1, s) == 1 :
        res.add(s)
    if f(5 * 3, s) == 1 :
        res.add(s)
    if f(5, s + 1) == 1 :
        res.add(s)
    if f(5, s * 3) == 1 :
        res.add(s)
print(min(res))

Ответ: 4

Ошибка.
Попробуйте повторить позже

Задача 14#63838

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч три камня или увеличить количество камней в куче в два раза. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 79. Победителем считается игрок, сделавший последний ход, т. е. первым получивший позицию, в которой в кучах будет 79 или больше камней. В начальный момент в первой куче было 9 камней, во второй куче – S камней, 1 ≤ S ≤ 69  . Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Показать ответ и решение
def f(a,b,m):
    if a+b>=79: return m%2==0
    if m==0: return 0
    h=[f(a+3,b,m-1),f(a*2,b,m-1),f(a,b+3,m-1),f(a,b*2,m-1)]
    return any(h) if (m-1)%2==0 else any(h)
print(min(s for s in range(1,70) if f(9,s,2)))

Ответ: 18

Ошибка.
Попробуйте повторить позже

Задача 15#63535

Два игрока Поп и Вор играют в следующую игру. Перед игроками лежат две кучи камней, Игроки ходят по очереди, первый ход делает Поп. За один ход игрок может добавить в одну из куч один камень или увеличить количество камней в 4 раза. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней.Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 82. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 82 или больше камней. В начальный момент в первой куче было 4 камня, во второй куче — S камней, 1 ≤ S ≤ 77  .

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

Показать ответ и решение

1) Откройте Excel, в ячейке C1 введите "82 число выигрышных камней. Постройте таблицу для всех возможных ходов. В ячейке A5 записываем начальное количество камней в первой куче - "4". В ячейке B5 будем изменять количество камней.

2) В ячейки C5:D8 вносим ходы Попа (+1 и *4): C5=A5+1, C6=A5, C7=A5*4, СC8=A5, D5=B5, D6=B5+1, D7=B5, D8=B5*4.

3) В ячейках E5:E8 формируем ходы Вора. Задача Вора - максимизировать количество камней в куче для ускорения победы. Оптимальный ход - умножить на 4 кучу с большим количеством камней и добавить вторую. Поэтому E5=MAX(C5:D5)*4+MIN(C5:D5).

4) Для удобства отслеживания победных ходов используем условное форматирование. Выделяем ячейку E5, переходим в "Условное форматирование "Правила выделения ячеек "другие правила и применяем правило подсветки ячейки зеленым при условии победы.

PIC

Протянем ячейку E5 c формулой и форматированием до ячейки E8.

5) Теперь в ячейку B5 можно вводить различные значения и анализировать возможные исходы игры.. Заметим, при B5=5, у нас впервые «загорается» одна ячейка зеленым – это означает выигрыш. Поп создает кучу (4,20) – совершает неудачный ход, что приводит к победе Вора, формирующего выигрышную комбинацию с суммой 82.

PIC

Ответ: 5

Ошибка.
Попробуйте повторить позже

Задача 16#63378

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

Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 78. Победителем считается игрок, сделавший последний ход, т. е. первым получивший позицию, в которой в кучах будет 78 или больше камней. В начальный момент в первой куче было 7 камней, во второй куче – S камней, 1 ≤ S ≤ 70. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

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

Показать ответ и решение
def f(x, y, h):
    if h == 3 and x + y >= 78:
        return 1
    elif h == 3 and x + y < 78:
        return 0
    elif x + y >= 78 and h < 3:
        return 0
    else:
        if h % 2 == 0:
            return f(x + 3, y, h + 1) or f(x, y + 3, h + 1) or f(x * 2, y, h + 1) or f(x, y * 2, h + 1)
        else:
            return f(x + 3, y, h + 1) or f(x, y + 3, h + 1) or f(x * 2, y, h + 1) or f(x, y * 2, h + 1)

for x in range(1, 71):
    if f(x, 7, 1) == 1:
        print( x)
        break

Ответ: 18

Ошибка.
Попробуйте повторить позже

Задача 17#63375

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

Игра завершается в тот момент, когда общее количество камней в двух кучах становится не менее 108. Победителем считается игрок, сделавший последний ход. В начальный момент в первой куче было 6 камней, а во второй – S камней, 1 ≤ S ≤ 101.

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

Показать ответ и решение
def f(x, y, h):
    if h == 3 and x + y >= 108:
        return 1
    elif h == 3 and x + y < 108:
        return 0
    elif x + y >= 73 and h < 108:
        return 0
    else:
        if h % 2 == 0:
            return f(x + 1, y, h + 1) or f(x, y + 1, h + 1) or f(x * 4, y, h + 1) or f(x, y * 2, h + 1)
        else:
            return f(x + 1, y, h + 1) or f(x, y + 1, h + 1) or f(x * 4, y, h + 1) or f(x, y * 2, h + 1)

for x in range(1, 102):
    if f(x, 6, 1) == 1:
        print( x)
        break

Ответ: 7

Ошибка.
Попробуйте повторить позже

Задача 18#63372

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

Игра завершается в тот момент, когда суммарное количество камней в двух кучах становится не менее 105, побеждает игрок, сделавший последний ход. В начальный момент в первой куче было 4 камня, а во второй - S камней, 1 ≤ S ≤ 100.

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

Показать ответ и решение
def f(x, y, h):
    if h == 3 and x + y >= 105:
        return 1
    elif h == 3 and x + y < 105:
        return 0
    elif x + y >= 105 and h < 3:
        return 0
    else:
        if h % 2 == 0:
            return f(x + 1, y, h + 1) or f(x, y + 1, h + 1) or f(x * 4, y, h + 1) or f(x, y * 4, h + 1)
        else:
            return f(x + 1, y, h + 1) or f(x, y + 1, h + 1) or f(x * 4, y, h + 1) or f(x, y * 4, h + 1)

for x in range(1, 101):
    if f(x, 4, 1) == 1:
        print( x)
        break

Ответ: 7

Ошибка.
Попробуйте повторить позже

Задача 19#63369

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может в одну из куч (по своему выбору) добавить один камень или увеличить количество камней в куче в два раза. Например, пусть в одной куче 10 камней, а в другой 5 камней; такую позицию в игре будем обозначать (10, 5). Тогда за один ход можно получить любую из четырёх позиций: (11, 5), (20, 5), (10, 6), (10, 10). Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 73. Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, при которой в кучах будет 73 или больше камней. В начальный момент в первой куче было одиннадцать камней, во второй куче — S камней; 1 ≤ S    ≤ 61.

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

Показать ответ и решение
def f(x, y, h):
    if h == 3 and x + y >= 73:
        return 1
    elif h == 3 and x + y < 73:
        return 0
    elif x + y >= 73 and h < 3:
        return 0
    else:
        if h % 2 == 0:
            return f(x + 1, y, h + 1) or f(x, y + 1, h + 1) or f(x * 2, y, h + 1) or f(x, y * 2, h + 1)   # стратегия победителя
        else:
            return f(x + 1, y, h + 1) or f(x, y + 1, h + 1) or f(x * 2, y, h + 1) or f(x, y * 2, h + 1)  # стратегия проигравшего(неудачный ход)

for x in range(1, 62):
    if f(x, 11, 1) == 1:
        print( x)
        break

Ответ: 16

Ошибка.
Попробуйте повторить позже

Задача 20#61635

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч один камень или увеличить количество камней в куче в три раза. Например, пусть в одной куче 8 камней, а в другой 10 камней; такую позицию мы будем обозначать (8, 10) За один ход из позиции (8,10) можно получить любую из четырех позиций: (9, 10), (27, 10), (8, 11), (8, 30). Чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

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

В начальный момент в первой куче было 7 камней, во второй куче S камней, 1 ≤ S ≤ 67  .

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

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

Показать ответ и решение
Решение скрыто
Ответ: 8
Рулетка
Вы можете получить скидку в рулетке!