20. Выигрышная стратегия: часть 2: все задания
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании 19, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
Петя не должен выигрывать первым ходом, поэтому $11+3S<154$, откуда $S\le47$.
Проверяем возможные первые ходы Пети. Два наименьших подходящих значения получаются при $S=39$ и $S=40$. В обоих случаях Петя первым ходом утраивает первую кучу: $(11;S)\rightarrow(33;S)$.
Например, при $S=39$ Ваня может получить: $(37;39),\ (33;43),\ (99;39),\ (33;117)$.
Из каждой такой позиции Петя выигрывает следующим ходом:
- $(37;39)\rightarrow(37;117)$, сумма $154$;
- $(33;43)\rightarrow(33;129)$, сумма $162$;
- $(99;39)\rightarrow(99;117)$, сумма $216$;
- $(33;117)\rightarrow(37;117)$, сумма $154$.
При $S=40$ эта же стратегия также работает.
Для $S\le38$ гарантированной победы вторым ходом у Пети нет.
Второй способ – решение с помощью 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)
)
ans = []
for S in range(1, 143):
if not win1(11, S):
if any(
all(
x + y < 154 and win1(x, y)
for x, y in moves(a, b)
)
for a, b in moves(11, S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[39,\ 40]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании 19, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
Петя не должен выигрывать первым ходом, поэтому $14+3S<176$, откуда $S\leq53$.
Проверяем возможные первые ходы Пети. Два наименьших подходящих значения получаются при $S=42$ и $S=43$. В обоих случаях Петя первым ходом утраивает первую кучу:
$(14;S)\rightarrow(42;S)$.
Например, при $S=42$ Ваня может получить: $(45;42),\ (42;45),\ (126;42),\ (42;126)$.
Из каждой такой позиции Петя выигрывает следующим ходом:
- $(45;42)\rightarrow(135;42)$, сумма $177$;
- $(42;45)\rightarrow(42;135)$, сумма $177$;
- $(126;42)\rightarrow(378;42)$, сумма $420$;
- $(42;126)\rightarrow(42;378)$, сумма $420$.
При $S=43$ эта же стратегия также работает.
Для $S\leq41$ гарантированной победы вторым ходом у Пети нет.
Ответ: $42,\ 43$.
Второй способ – решение с помощью 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)
)
ans = []
for S in range(1, 162):
if not win1(14, S):
if any(
all(
x + y < 176 and win1(x, y)
for x, y in moves(a, b)
)
for a, b in moves(14, S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом. Программа выведет: $[42,\ 43]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
Петя не должен выигрывать первым ходом, поэтому $S\leq34$.
Чтобы Петя гарантированно выиграл вторым ходом, ему нужно первым ходом получить $34$ камня:
$34\rightarrow35\rightarrow70$,
$34\rightarrow68\rightarrow69$.
Независимо от хода Вани Петя следующим ходом выигрывает.
Получить $34$ первым ходом Петя может двумя способами:
$17\rightarrow34$;
$33\rightarrow34$.
Следовательно, два наименьших значения: $S=17$ и $S=33$.
Второй способ – решение с помощью Python
def moves(x):
return [x + 1, x * 2]
def win1(x):
return x < 69 and any(
y >= 69 for y in moves(x)
)
ans = []
for S in range(1, 69):
if not win1(S):
if any(
all(
y < 69 and win1(y)
for y in moves(x)
)
for x in moves(S)
if x < 69
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[17,\ 33]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
Петя не должен выигрывать первым ходом, поэтому $17+2S<133$, откуда $S\leq57$.
Первое подходящее значение: $S=28$. Петя удваивает вторую кучу: $(17;28)\rightarrow(17;56)$.
Ваня может получить: $(21;56)$, $(17;60)$, $(34;56)$, $(17;112)$.
Из каждой позиции Петя выигрывает следующим ходом:
- $(21;56)\rightarrow(21;112)$, сумма $133$;
- $(17;60)\rightarrow(17;120)$, сумма $137$;
- $(34;56)\rightarrow(34;112)$, сумма $146$;
- $(17;112)\rightarrow(21;112)$, сумма $133$.
Следующее подходящее значение: $S=48$. Петя удваивает первую кучу:
$(17;48)\rightarrow(34;48)$.
Ваня может получить: $(38;48)$, $(34;52)$, $(68;48)$, $(34;96)$. Из каждой такой позиции Петя выигрывает следующим ходом.
Для значений между $28$ и $48$ гарантированной победы вторым ходом у Пети нет.
Второй способ – решение с помощью 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)
)
ans = []
for S in range(1, 116):
if not win1(17, S):
if any(
all(
x + y < 133 and win1(x, y)
for x, y in moves(a, b)
)
for a, b in moves(17, S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[28,\ 48]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
Петя не должен выигрывать первым ходом, поэтому $15+3S<155$, откуда $S\leq46$.
Первое подходящее значение: $S=19$. Петя утраивает первую кучу: $(15;19)\rightarrow(45;19)$.
Ваня может получить: $(46;19)$, $(45;20)$, $(135;19)$, $(45;57)$.
Из каждой такой позиции Петя выигрывает следующим ходом:
- $(46;19)\rightarrow(138;19)$, сумма $157$;
- $(45;20)\rightarrow(135;20)$, сумма $155$;
- $(135;19)\rightarrow(136;19)$, сумма $155$;
- $(45;57)\rightarrow(135;57)$, сумма $192$.
Второе подходящее значение: $S=46$. Петя добавляет $1$ камень в первую кучу:
$(15;46)\rightarrow(16;46)$.
После любого хода Вани Петя также сможет выиграть следующим ходом.
Два наименьших значения:
$S=19$ и $S=46$.
Ответ: $19,\ 46$.
Второй способ – решение с помощью 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)
)
ans = []
for S in range(1, 140):
if not win1(15, S):
if any(
all(
x + y < 155 and win1(x, y)
for x, y in moves(a, b)
)
for a, b in moves(15, S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[19,\ 46]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
За один ход можно выиграть из позиций от $17$ до $50$. Значит, Петя не может выиграть первым ходом при $S\geq51$.
Чтобы Петя гарантированно выиграл вторым ходом, после его первого хода должно остаться $51$, $52$ или $53$ камня:
$51\rightarrow48,\ 43,\ 17$;
$52\rightarrow49,\ 44,\ 17$;
$53\rightarrow50,\ 45,\ 17$.
Из каждой полученной позиции Петя сможет выиграть следующим ходом.
Два наименьших начальных значения, из которых Петя может получить такие позиции:
$54\rightarrow51$;
$55\rightarrow52$.
Два наименьших значения: $54$ и $55$.
Второй способ – решение с помощью 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)
)
ans = []
for S in range(17, 1000):
if not win1(S):
if any(
x > 16 and all(
y > 16 and win1(y)
for y in moves(x)
)
for x in moves(S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[54,\ 55]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
За один ход можно выиграть из позиций от $18$ до $53$. Значит, Петя не может выиграть первым ходом при $S\geq54$.
Пете выгодно первым ходом оставить $54$ или $55$ камней:
$54\rightarrow52,\ 50,\ 18$;
$55\rightarrow53,\ 51,\ 18$.
Из каждой полученной позиции Петя следующим ходом сможет получить не более $17$ камней.
Два наименьших начальных значения, из которых Петя может получить $54$ или $55$:
$56\rightarrow54$;
$57\rightarrow55$.
Второй способ – решение с помощью 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)
)
ans = []
for S in range(18, 1000):
if not win1(S):
if any(
x > 17 and all(
y > 17 and win1(y)
for y in moves(x)
)
for x in moves(S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[56,\ 57]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
За один ход можно выиграть из позиций от $16$ до $63$. Значит, Петя не может выиграть первым ходом при $S\geq64$.
Чтобы гарантированно выиграть вторым ходом, Петя первым ходом должен получить $64$, $65$ или $66$ камней.
Например: $64\rightarrow61,\ 57,\ 16$.
Из каждой такой позиции Петя следующим ходом выигрывает:
$61\rightarrow15$;
$57\rightarrow14$;
$16\rightarrow13$.
Два наименьших начальных значения:
$67\rightarrow64$;
$68\rightarrow65$.
Второй способ – решение с помощью 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)
)
ans = []
for S in range(16, 1000):
if not win1(S):
if any(
x > 15 and all(
y > 15 and win1(y)
for y in moves(x)
)
for x in moves(S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[67,\ 68]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два таких минимальных значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
Петя не должен выигрывать первым ходом, поэтому $S\leq22$.
Чтобы гарантированно выиграть вторым ходом, Петя первым ходом должен получить $22$ камня.
После этого Ваня может получить: $22\rightarrow23,\ 26,\ 66$.
Из каждой такой позиции Петя выигрывает следующим ходом:
$23\rightarrow69$;
$26\rightarrow78$;
$66\rightarrow67$.
Получить $22$ камня Петя может двумя минимальными способами:
$18\rightarrow22$;
$21\rightarrow22$.
Второй способ – решение с помощью 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)
)
ans = []
for S in range(1, 67):
if not win1(S):
if any(
x < 67 and all(
y < 67 and win1(y)
for y in moves(x)
)
for x in moves(S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[18,\ 21]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
За один ход можно выиграть из позиций от $24$ до $95$. Значит, Петя не может выиграть первым ходом при $S\geq96$.
Пете первым ходом нужно получить $96$ или $97$ камней.
Для $96$ возможны ходы Вани: $96\rightarrow94,\ 92,\ 24$.
Для $97$: $97\rightarrow95,\ 93,\ 24$.
Все полученные позиции находятся в диапазоне от $24$ до $95$, поэтому Петя следующим ходом выигрывает.
Два наименьших начальных значения:
$98\rightarrow96$;
$99\rightarrow97$.
Второй способ – решение с помощью 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)
)
ans = []
for S in range(24, 1000):
if not win1(S):
if any(
x > 23 and all(
y > 23 and win1(y)
for y in moves(x)
)
for x in moves(S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[98,\ 99]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
За один ход можно выиграть из позиций от $31$ до $123$. Значит, Петя не может выиграть первым ходом при $S\geq124$.
Пете первым ходом нужно получить $124$, $125$ или $126$ камней.
Например: $124\rightarrow121,\ 119,\ 31$.
Из каждой такой позиции Петя следующим ходом выигрывает.
Два наименьших начальных значения:
$127\rightarrow124$;
$128\rightarrow125$.
Второй способ – решение с помощью 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)
)
ans = []
for S in range(31, 1000):
if not win1(S):
if any(
x > 30 and all(
y > 30 and win1(y)
for y in moves(x)
)
for x in moves(S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[127,\ 128]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
Петя не должен выигрывать первым ходом, поэтому $S\leq32$.
Чтобы Петя гарантированно выиграл вторым ходом, первым ходом ему нужно получить $32$ камня: $32\rightarrow33$ или $32\rightarrow64$.
Из обеих позиций Петя следующим ходом выигрывает:
$33\rightarrow66$;
$64\rightarrow128$.
Получить $32$ камня Петя может двумя способами:
$16\rightarrow32$;
$31\rightarrow32$.
Второй способ – решение с помощью Python
def moves(x):
return [x + 1, x * 2]
def win1(x):
return x < 66 and any(
y >= 66 for y in moves(x)
)
ans = []
for S in range(1, 66):
if not win1(S):
if any(
x < 66 and all(
y < 66 and win1(y)
for y in moves(x)
)
for x in moves(S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[16,\ 31]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
Петя не должен выигрывать первым ходом, поэтому $S\leq28$.
Чтобы гарантированно выиграть вторым ходом, Петя первым ходом должен получить $28$ камней.
После этого Ваня может получить: $28\rightarrow29,\ 32,\ 56$.
Из каждой такой позиции Петя выигрывает следующим ходом:
$29\rightarrow58$;
$32\rightarrow64$;
$56\rightarrow60$.
Получить $28$ камней Петя может тремя способами:
$14\rightarrow28$;
$24\rightarrow28$;
$27\rightarrow28$.
Два наименьших значения: $14$ и $24$.
Ответ: $14,\ 24$.
Второй способ – решение с помощью 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)
)
ans = []
for S in range(1, 58):
if not win1(S):
if any(
x < 58 and all(
y < 58 and win1(y)
for y in moves(x)
)
for x in moves(S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[14,\ 24]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
Петя не должен выигрывать первым ходом, поэтому $7+2S<81$, откуда $S\leq36$.
Первое подходящее значение: $S=33$. Петя удваивает первую кучу: $(7;33)\rightarrow(14;33)$.
Ваня может получить: $(15;33)$, $(14;34)$, $(28;33)$, $(14;66)$.
Из каждой такой позиции Петя выигрывает следующим ходом:
- $(15;33)\rightarrow(15;66)$, сумма $81$;
- $(14;34)\rightarrow(14;68)$, сумма $82$;
- $(28;33)\rightarrow(56;33)$, сумма $89$;
- $(14;66)\rightarrow(15;66)$, сумма $81$.
Второе подходящее значение: $S=36$. Петя добавляет $1$ камень в первую кучу:
$(7;36)\rightarrow(8;36)$.
После любого хода Вани Петя также сможет выиграть следующим ходом.
Второй способ – решение с помощью 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)
)
ans = []
for S in range(1, 74):
if not win1(7, S):
if any(
all(
x + y < 81 and win1(x, y)
for x, y in moves(a, b)
)
for a, b in moves(7, S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[33,\ 36]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
Петя не должен выигрывать первым ходом, поэтому $S\leq25$.
Чтобы гарантированно выиграть вторым ходом, Петя первым ходом должен получить $25$ камней.
После этого Ваня может получить: $25\rightarrow26,\ 29,\ 50$.
Из каждой такой позиции Петя выигрывает следующим ходом:
$26\rightarrow52$;
$29\rightarrow58$;
$50\rightarrow51$.
Получить $25$ камней Петя может двумя минимальными способами:
$21\rightarrow25$;
$24\rightarrow25$.
Второй способ – решение с помощью 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)
)
ans = []
for S in range(1, 51):
if not win1(S):
if any(
x < 51 and all(
y < 51 and win1(y)
for y in moves(x)
)
for x in moves(S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[21,\ 24]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
Петя не должен выигрывать первым ходом, поэтому $14+2S<169$, откуда $S\leq77$.
Первое подходящее значение: $S=70$. Петя удваивает первую кучу: $(14;70)\rightarrow(28;70)$.
Ваня может получить: $(30;70),\ (28;72),\ (56;70),\ (28;140)$.
Из каждой такой позиции Петя выигрывает следующим ходом:
- $(30;70)\rightarrow(30;140)$, сумма $170$;
- $(28;72)\rightarrow(28;144)$, сумма $172$;
- $(56;70)\rightarrow(56;140)$, сумма $196$;
- $(28;140)\rightarrow(30;140)$, сумма $170$.
Второе подходящее значение: $S=75$. Петя добавляет $2$ камня во вторую кучу: $(14;75)\rightarrow(14;77)$.
После любого хода Вани Петя также сможет выиграть следующим ходом.
Для $S<70$ подходящей позиции после первого хода Пети нет.
Второй способ – решение с помощью 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)
)
ans = []
for S in range(1, 155):
if not win1(14, S):
if any(
all(
x + y < 169 and win1(x, y)
for x, y in moves(a, b)
)
for a, b in moves(14, S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[70,\ 75]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
Петя не должен выигрывать первым ходом, поэтому $S\leq18$.
Чтобы гарантированно выиграть вторым ходом, Петя первым ходом должен получить $18$ камней.
После этого Ваня может получить:
$18\rightarrow19$;
$18\rightarrow36$.
Из обеих позиций Петя выигрывает следующим ходом:
$19\rightarrow38$;
$36\rightarrow72$.
Получить $18$ камней Петя может двумя способами:
$9\rightarrow18$;
$17\rightarrow18$.
Ответ: $9,\ 17$.
Второй способ – решение с помощью Python
def moves(x):
return [x + 1, x * 2]
def win1(x):
return x < 38 and any(
y >= 38 for y in moves(x)
)
ans = []
for S in range(1, 38):
if not win1(S):
if any(
x < 38 and all(
y < 38 and win1(y)
for y in moves(x)
)
for x in moves(S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[9,\ 17]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
Петя не должен выигрывать первым ходом, поэтому $13+2S<135$, откуда $S\leq60$.
Первое подходящее значение: $S=30$. Петя удваивает вторую кучу: $(13;30)\rightarrow(13;60)$.
Ваня может получить: $(16;60),\ (13;63),\ (26;60),\ (13;120)$.
Из каждой такой позиции Петя выигрывает следующим ходом:
- $(16;60)\rightarrow(16;120)$, сумма $136$;
- $(13;63)\rightarrow(13;126)$, сумма $139$;
- $(26;60)\rightarrow(26;120)$, сумма $146$;
- $(13;120)\rightarrow(16;120)$, сумма $136$.
Второе подходящее значение: $S=53$. Петя удваивает первую кучу: $(13;53)\rightarrow(26;53)$.
После любого хода Вани Петя также сможет выиграть следующим ходом.
Второй способ – решение с помощью 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)
)
ans = []
for S in range(1, 122):
if not win1(13, S):
if any(
all(
x + y < 135 and win1(x, y)
for x, y in moves(a, b)
)
for a, b in moves(13, S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[30,\ 53]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
Первое подходящее значение: $S=10$. Петя утраивает первую кучу: $(6;10)\rightarrow(18;10)$.
Ваня может получить: $(19;10),\ (18;11),\ (54;10),\ (18;30)$.
Из каждой такой позиции Петя выигрывает следующим ходом:
- $(19;10)\rightarrow(57;10)$, сумма $67$;
- $(18;11)\rightarrow(54;11)$, сумма $65$;
- $(54;10)\rightarrow(55;10)$, сумма $65$;
- $(18;30)\rightarrow(18;90)$, сумма $108$.
Второе подходящее значение: $S=19$. Петя добавляет $1$ камень в первую кучу: $(6;19)\rightarrow(7;19)$.
После любого хода Вани Петя также сможет выиграть следующим ходом.
Два наименьших значения: $S=10$ и $S=19$.
Второй способ – решение с помощью 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)
)
ans = []
for S in range(1, 59):
if not win1(6, S):
if any(
all(
x + y < 65 and win1(x, y)
for x, y in moves(a, b)
)
for a, b in moves(6, S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[10,\ 19]$.
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя.
Для игры, описанной в задании $19$, найдите два наименьших значения $S$, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
- Петя не может выиграть за один ход;
- Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания без пробелов.
Первый способ – математическое решение
За один ход можно выиграть из позиций от $11$ до $43$. Значит, Петя не может выиграть первым ходом при $S\geq44$.
Пете первым ходом нужно получить $44$, $45$ или $46$ камней.
Например, для $44$ Ваня может получить: $44\rightarrow41,\ 39,\ 11$.
Из каждой такой позиции Петя следующим ходом выигрывает:
$41\rightarrow10$;
$39\rightarrow9$;
$11\rightarrow8$.
Два наименьших начальных значения:
$47\rightarrow44$;
$48\rightarrow45$.
Второй способ – решение с помощью 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)
)
ans = []
for S in range(11, 1000):
if not win1(S):
if any(
x > 10 and all(
y > 10 and win1(y)
for y in moves(x)
)
for x in moves(S)
):
ans.append(S)
print(ans[:2])
Программа проверяет, что Петя не может выиграть первым ходом, а затем ищет такой его ход, после которого при любом ходе Вани Петя выигрывает следующим ходом.
Программа выведет: $[47,\ 48]$.