№19 — примеры решений

Один эталонный разбор.

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: - добавить в кучу 2 камня; - добавить в кучу 4 камня; - увеличить количество камней в куче в 2 раза. Например, из кучи в 20 камней за один ход можно получить кучу из 22, 24 или 40 камней. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается, когда количество камней в куче становится не менее 125. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 125 или более камней. В начальный момент в куче было S камней, 1 ≤ S ≤ 124. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 125: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 2, m - 1), f(a + 4, m - 1), f(a * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 125) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 125) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 125) if f(s, 4) and not f(s, 2)])
Ответ:61
📚 Все задачи с разбором 86
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. Например, в одной куче 10 камней, а в другой 5 камней; такую позицию в игре обозначим (10, 5). Тогда за один ход можно получить любую из четырёх позиций: (11, 5), (20, 5), (10, 6), (10, 10). Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 207. Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, при которой в кучах 207 или больше камней. В начальный момент в первой куче 17 камней, во второй куче — S камней; 1 < S < 189.
Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b >= 207: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 1, b, m - 1), f(a, b + 1, m - 1), f(a * 2, b, m - 1), f(a, b * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(2, 189) if not f(17, s, 1) and f(17, s, 2)])
# print('20)', [s for s in range(2, 189) if not f(17, s, 1) and f(17, s, 3)])
# print('21)', [s for s in range(2, 189) if f(17, s, 4) and not f(17, s, 2)])
Ответ:19) []
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: — убрать из кучи 3 камня; — убрать из кучи 5 камней; — уменьшить количество камней в куче в 4 раза (количество камней, полученное при делении, округляется до меньшего). Например, из кучи в 20 камней за один ход можно получить кучу из 17, 15 или 5 камней. Игра завершается, когда количество камней в куче становится не более 30. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 30 или менее камней. В начальный момент в куче было S камней, S ≥ 31. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a <= 30: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, m - 1), f(a - 5, m - 1), f(a // 4, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(31, 136) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(31, 136) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(31, 136) if f(s, 4) and not f(s, 2)])
Ответ:126
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: добавить в кучу 3 камня; добавить в кучу 6 камней; увеличить количество камней в куче в 3 раза. Например, из кучи в 20 камней за один ход можно получить кучу из 23, 26 или 60 камней. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается, когда количество камней в куче становится не менее 132. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 132 или более камней.
В начальный момент в куче было S камней, 1 ≤ S ≤ 131. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 132: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 3, m - 1), f(a + 6, m - 1), f(a * 3, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 132) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 132) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 132) if f(s, 4) and not f(s, 2)])
Ответ:43
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один или четыре камня либо увеличить количество камней в куче в два раза. У каждого игрока есть неограниченное количество камней, чтобы делать ходы. Игра завершается в тот момент, когда количество камней в куче становится не менее 51. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из 51 камня или больше. В начальный момент в куче было S камней; 1 ≤ S ≤ 50. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 51: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 1, m - 1), f(a + 4, m - 1), f(a * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 51) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 51) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 51) if f(s, 4) and not f(s, 2)])
Ответ:25
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 81. Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, при которой в кучах находится 81 камень или больше. В начальный момент в первой куче было семь камней, во второй куче — S камней; 1 ≤ S ≤ 73. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b >= 81: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 1, b, m - 1), f(a, b + 1, m - 1),
         f(a * 2, b, m - 1), f(a, b * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 74) if not f(7, s, 1) and f(7, s, 2)])
# print('20)', [s for s in range(1, 74) if not f(7, s, 1) and f(7, s, 3)])
# print('21)', [s for s in range(1, 74) if f(7, s, 4) and not f(7, s, 2)])
Ответ:19) []
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один или четыре камня либо увеличить количество камней в куче в два раза. У каждого игрока есть неограниченное количество камней, чтобы делать ходы. Игра завершается в тот момент, когда количество камней в куче становится не менее 51. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из 51 камня или больше. В начальный момент в куче было S камней; 1 ≤ S ≤ 50. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 51: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 1, m - 1), f(a + 4, m - 1), f(a * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 51) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 51) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 51) if f(s, 4) and not f(s, 2)])
Ответ:25
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: - добавить в кучу 2 камня; - добавить в кучу 5 камней; - увеличить количество камней в куче в 2 раза. Например, из кучи в 20 камней за один ход можно получить кучу из 22, 25 или 40 камней. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается, когда количество камней в куче становится не менее 128. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 128 или более камней. В начальный момент в куче было S камней, 1 < S < 127. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 128: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 2, m - 1), f(a + 5, m - 1), f(a * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(2, 127) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(2, 127) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(2, 127) if f(s, 4) and not f(s, 2)])
Ответ:62
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один или четыре камня либо увеличить количество камней в куче в три раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 67. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из 67 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 66. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Укажите такое значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 67: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 1, m - 1), f(a + 4, m - 1), f(a * 3, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 67) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 67) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 67) if f(s, 4) and not f(s, 2)])
Ответ:22
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: – убрать из кучи 3 камня; – убрать из кучи 7 камней; – уменьшить количество камней в куче в 3 раза (количество камней, полученное при делении, округляется до меньшего). У каждого игрока есть неограниченное количество камней, чтобы делать ходы. Игра завершается в тот момент, когда количество камней в куче становится не более 11. Победителем считается игрок, сделавший последний ход, т.е. первым получивший в куче 11 камней или меньше. В начальный момент в куче было S камней; S > 11. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Укажите минимальное значение S, когда Петя не может выиграть за один ход, но при этом Ваня может выиграть своим первым ходом при любой игре Пети.
def f(a, m):
    if a <= 11: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, m - 1), f(a - 7, m - 1), f(a // 3, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(12, 63) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(12, 63) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(12, 63) if f(s, 4) and not f(s, 2)])
Ответ:36
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: - убрать из кучи 3 камня; - убрать из кучи 8 камней; - уменьшить количество камней в куче в 3 раза (количество камней, полученное при делении, округляется до меньшего). Например, из кучи в 20 камней за один ход можно получить кучу из 17, 12 или 6 камней. Игра завершается, когда количество камней в куче становится не более 16. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 16 или менее камней. В начальный момент в куче было S камней, S ≥ 17. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a <= 16: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, m - 1), f(a - 8, m - 1), f(a // 3, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(17, 68) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(17, 68) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(17, 68) if f(s, 4) and not f(s, 2)])
Ответ:53
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: — убрать из кучи 3 камня; — убрать из кучи 6 камней; — уменьшить количество камней в куче в 3 раза (количество камней, полученное при делении, округляется до меньшего). Например, из кучи в 20 камней за один ход можно получить кучу из 17, 14 или 6 камней. Игра завершается, когда количество камней в куче становится не более 27. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 27 или менее камней. В начальный момент в куче было S камней, S ≥ 28. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a <= 27: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, m - 1), f(a - 6, m - 1), f(a // 3, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(28, 98) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(28, 98) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(28, 98) if f(s, 4) and not f(s, 2)])
Ответ:86
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: - убрать из кучи 1 камень; - убрать из кучи 6 камней; - уменьшить количество камней в куче в 5 раз (количество камней, полученное при делении, округляется до меньшего). Например, из кучи в 20 камней за один ход можно получить кучу из 19, 14 или 4 камня. Игра завершается, когда количество камней в куче становится не более 12. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 12 или менее камней. В начальный момент в куче было S камней; S≥13. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a <= 12: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 1, m - 1), f(a - 6, m - 1), f(a // 5, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(13, 77) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(13, 77) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(13, 77) if f(s, 4) and not f(s, 2)])
Ответ:65
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: — убрать из кучи 3 камня; — убрать из кучи 8 камней; — уменьшить количество камней в куче в 3 раза (количество камней, полученное при делении, округляется до меньшего). Например, из кучи в 20 камней за один ход можно получить кучу из 17, 12 или 6 камней. Игра завершается, когда количество камней в куче становится не более 15. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу из 15 или менее камней. В начальный момент в куче было S камней, S ≥ 16. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a <= 15: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, m - 1), f(a - 8, m - 1), f(a // 3, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(16, 67) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(16, 67) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(16, 67) if f(s, 4) and not f(s, 2)])
Ответ:50
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: убрать из кучи два камня, или убрать из кучи пять камней, или уменьшить количество камней в куче в три раза (количество камней, полученное при делении, округляется до меньшего). Например, из кучи в 20 камней за один ход можно получить кучу из 18, 15 или 6 камней. Игра завершается, когда количество камней в куче становится не более 19. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 19 или меньше камней. В начальный момент в куче было S камней, S ≥ 20. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.
Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a <= 19: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 2, m - 1), f(a - 5, m - 1), f(a // 3, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(20, 73) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(20, 73) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(20, 73) if f(s, 4) and not f(s, 2)])
Ответ:61
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. Например, в одной куче 10 камней, а в другой 5 камней; такую позицию в игре обозначим (10, 5). Тогда за один ход можно получить любую из четырёх позиций: (11, 5), (20, 5), (10, 6), (10, 10). Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 211. Победителем считается игрок, сделавший последний ход, то есть первым получивший такую позицию, при которой в кучах 211 или больше камней. В начальный момент в первой куче 17 камней, во второй куче — S камней; 1 < S ≤ 193. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b >= 211: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 1, b, m - 1), f(a, b + 1, m - 1),
         f(a * 2, b, m - 1), f(a, b * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b >= 211: return m % 2 == 0
    if m == 0: return 0
    h = [g(a + 1, b, m - 1), g(a, b + 1, m - 1),
         g(a * 2, b, m - 1), g(a, b * 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(2, 194) if not g(17, s, 1) and g(17, s, 2)])
# print('20)', [s for s in range(2, 194) if not f(17, s, 1) and f(17, s, 3)])
# print('21)', [s for s in range(2, 194) if f(17, s, 4) and not f(17, s, 2)])
Ответ:49
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: - добавить в кучу 2 камня; - добавить в кучу 5 камней; - увеличить количество камней в куче в 3 раза. Например, из кучи в 20 камней за один ход можно получить кучу из 22, 25 или 60 камней. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 97. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из 97 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 96. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 97: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 2, m - 1), f(a + 5, m - 1), f(a * 3, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 97) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 97) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 97) if f(s, 4) and not f(s, 2)])
Ответ:31
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: - добавить в кучу 3 камня; - добавить в кучу 7 камней; - увеличить количество камней в куче в 2 раза. Например, из кучи в 20 камней за один ход можно получить кучу из 23, 27 или 40 камней. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 89. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из 89 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 88. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 89: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 3, m - 1), f(a + 7, m - 1), f(a * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 89) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 89) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 89) if f(s, 4) and not f(s, 2)])
Ответ:42
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: - добавить в кучу 4 камня; - добавить в кучу 6 камней; - увеличить количество камней в куче в 3 раза. Например, из кучи в 20 камней за один ход можно получить кучу из 24, 26 или 60 камней. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 100. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из 100 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 99. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 100: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 4, m - 1), f(a + 6, m - 1), f(a * 3, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 100) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 100) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 100) if f(s, 4) and not f(s, 2)])
Ответ:30
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: - добавить в кучу 2 камня; - добавить в кучу 9 камней; - увеличить количество камней в куче в 2 раза. Например, из кучи в 20 камней за один ход можно получить кучу из 22, 29 или 40 камней. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 71. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из 71 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 70. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 71: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 2, m - 1), f(a + 9, m - 1), f(a * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 71) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 71) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 71) if f(s, 4) and not f(s, 2)])
Ответ:34
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: - добавить в кучу 5 камня; - добавить в кучу 8 камней; - увеличить количество камней в куче в 2 раза. Например, из кучи в 20 камней за один ход можно получить кучу из 25, 28 или 40 камней. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 121. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из 121 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 120. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 121: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 5, m - 1), f(a + 8, m - 1), f(a * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 121) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 121) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 121) if f(s, 4) and not f(s, 2)])
Ответ:56
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: - добавить в кучу 3 камня; - добавить в кучу 4 камней; - увеличить количество камней в куче в 4 раза. Например, из кучи в 20 камней за один ход можно получить кучу из 23, 24 или 80 камней. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 140. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из 140 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 139. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 140: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 3, m - 1), f(a + 4, m - 1), f(a * 4, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 140) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 140) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 140) if f(s, 4) and not f(s, 2)])
Ответ:32
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: - добавить в кучу 6 камня; - добавить в кучу 11 камней; - увеличить количество камней в куче в 2 раза. Например, из кучи в 20 камней за один ход можно получить кучу из 26, 31 или 40 камней. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 90. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из 90 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 89. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 90: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 6, m - 1), f(a + 11, m - 1), f(a * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 90) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 90) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 90) if f(s, 4) and not f(s, 2)])
Ответ:39
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: - добавить в кучу 1 камня; - добавить в кучу 8 камней; - увеличить количество камней в куче в 3 раза. Например, из кучи в 20 камней за один ход можно получить кучу из 21, 28 или 60 камней. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 82. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из 82 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 81. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 82: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 1, m - 1), f(a + 8, m - 1), f(a * 3, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 82) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 82) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 82) if f(s, 4) and not f(s, 2)])
Ответ:27
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: - добавить в кучу 4 камня; - добавить в кучу 9 камней; - увеличить количество камней в куче в 2 раза. Например, из кучи в 20 камней за один ход можно получить кучу из 24, 29 или 40 камней. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 96. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из 96 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 95. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 96: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 4, m - 1), f(a + 9, m - 1), f(a * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 96) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 96) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 96) if f(s, 4) and not f(s, 2)])
Ответ:44
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: - добавить в кучу 7 камня; - добавить в кучу 10 камней; - увеличить количество камней в куче в 2 раза. Например, из кучи в 20 камней за один ход можно получить кучу из 27, 30 или 40 камней. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 130. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из 130 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 129. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 130: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 7, m - 1), f(a + 10, m - 1), f(a * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 130) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 130) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 130) if f(s, 4) and not f(s, 2)])
Ответ:58
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу 2 или 3 камня либо увеличить количество камней в куче в 3 раза. Для того, чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 313. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из 313 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 312. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите сумму таких значений S, при которых Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 313: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 2, m - 1), f(a + 3, m - 1), f(a * 3, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 313) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 313) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 313) if f(s, 4) and not f(s, 2)])
Ответ:207
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу 1 или 3 камня либо увеличить количество камней в куче в 2 раза. Для того, чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 172. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из 172 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 171. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 172: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 1, m - 1), f(a + 3, m - 1), f(a * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 172) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 172) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 172) if f(s, 4) and not f(s, 2)])
Ответ:85
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч 3 камня или уменьшить количество камней в выбранной куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 36. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 36 или меньше камней. В начальный момент в первой куче было 20 камней, во второй куче — S камней, 16 < S ≤ 150. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, b, m):
    if a + b <= 36: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f((a + 1) // 2, b, m - 1), f(a, (b + 1) // 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(17, 151) if not f(20, s, 1) and f(20, s, 2)])
# print('20)', [s for s in range(17, 151) if not f(20, s, 1) and f(20, s, 3)])
# print('21)', [s for s in range(17, 151) if f(20, s, 4) and not f(20, s, 2)])
Ответ:33
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу 2 или 4 камня либо увеличить количество камней в куче в 2 раза. Для того, чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 125. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из 125 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 124. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 125: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 2, m - 1), f(a + 4, m - 1), f(a * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 125) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 125) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 125) if f(s, 4) and not f(s, 2)])
Ответ:61
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу 4 или 7 камня либо увеличить количество камней в куче в 3 раза. Для того, чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 210. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из 210 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 209. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите максимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 210: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 4, m - 1), f(a + 7, m - 1), f(a * 3, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 210) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 210) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 210) if f(s, 4) and not f(s, 2)])
Ответ:69
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу 5 или 6 камня либо увеличить количество камней в куче в 2 раза. Для того, чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 190. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из 190 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 189. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите сумму таких значений S, при которых Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 190: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 5, m - 1), f(a + 6, m - 1), f(a * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 190) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 190) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 190) if f(s, 4) and not f(s, 2)])
Ответ:460
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу 3 или 8 камня либо увеличить количество камней в куче в 4 раза. Для того, чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 260. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из 260 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 259. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 260: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 3, m - 1), f(a + 8, m - 1), f(a * 4, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 260) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 260) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 260) if f(s, 4) and not f(s, 2)])
Ответ:62
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу 1 или 5 камня либо увеличить количество камней в куче в 3 раза. Для того, чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 155. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из 155 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 154. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите максимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 155: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 1, m - 1), f(a + 5, m - 1), f(a * 3, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 155) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 155) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 155) if f(s, 4) and not f(s, 2)])
Ответ:51
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу 6 или 9 камня либо увеличить количество камней в куче в 2 раза. Для того, чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 230. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из 230 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 229. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите сумму таких значений S, при которых Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 230: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 6, m - 1), f(a + 9, m - 1), f(a * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 230) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 230) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 230) if f(s, 4) and not f(s, 2)])
Ответ:669
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу 2 или 10 камня либо увеличить количество камней в куче в 2 раза. Для того, чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 180. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из 180 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 179. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 180: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 2, m - 1), f(a + 10, m - 1), f(a * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 180) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 180) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 180) if f(s, 4) and not f(s, 2)])
Ответ:88
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу 4 или 5 камня либо увеличить количество камней в куче в 4 раза. Для того, чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 300. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из 300 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 299. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите максимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 300: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 4, m - 1), f(a + 5, m - 1), f(a * 4, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 300) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 300) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 300) if f(s, 4) and not f(s, 2)])
Ответ:74
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу 7 или 11 камня либо увеличить количество камней в куче в 2 раза. Для того, чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 240. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из 240 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 239. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите сумму таких значений S, при которых Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 240: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 7, m - 1), f(a + 11, m - 1), f(a * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 240) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 240) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 240) if f(s, 4) and not f(s, 2)])
Ответ:812
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу 2 или 6 камня либо увеличить количество камней в куче в 5 раза. Для того, чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 350. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из 350 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 349. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 350: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 2, m - 1), f(a + 6, m - 1), f(a * 5, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 350) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 350) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 350) if f(s, 4) and not f(s, 2)])
Ответ:68
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу 3 или 9 камня либо увеличить количество камней в куче в 2 раза. Для того, чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 210. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из 210 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 209. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите максимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 210: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 3, m - 1), f(a + 9, m - 1), f(a * 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 210) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 210) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 210) if f(s, 4) and not f(s, 2)])
Ответ:104
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу 1 или 4 камня либо увеличить количество камней в куче в 3 раза. Для того, чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится не менее 160. Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу, состоящую из 160 или более камней. В начальный момент в куче было S камней; 1 ≤ S ≤ 159. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите сумму таких значений S, при которых Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a >= 160: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 1, m - 1), f(a + 4, m - 1), f(a * 3, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 160) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(1, 160) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(1, 160) if f(s, 4) and not f(s, 2)])
Ответ:53
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч 4 камня или уменьшить количество камней в выбранной куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 48. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 48 или меньше камней. В начальный момент в первой куче было 24 камней, во второй куче — S камней, 18 < S ≤ 170. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, b, m):
    if a + b <= 48: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 4, b, m - 1), f(a, b - 4, m - 1), f((a + 1) // 2, b, m - 1), f(a, (b + 1) // 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(19, 171) if not f(24, s, 1) and f(24, s, 2)])
# print('20)', [s for s in range(19, 171) if not f(24, s, 1) and f(24, s, 3)])
# print('21)', [s for s in range(19, 171) if f(24, s, 4) and not f(24, s, 2)])
Ответ:19
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч 2 камня или уменьшить количество камней в выбранной куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 60. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 60 или меньше камней. В начальный момент в первой куче было 30 камней, во второй куче — S камней, 20 < S ≤ 180. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите сумму таких значений S, при которых Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, b, m):
    if a + b <= 60: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 2, b, m - 1), f(a, b - 2, m - 1), f((a + 1) // 2, b, m - 1), f(a, (b + 1) // 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(21, 181) if not f(30, s, 1) and f(30, s, 2)])
# print('20)', [s for s in range(21, 181) if not f(30, s, 1) and f(30, s, 3)])
# print('21)', [s for s in range(21, 181) if f(30, s, 4) and not f(30, s, 2)])
Ответ:378
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 72. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 72 или меньше камней. В начальный момент в первой куче было 50 камней, во второй куче – S камней, S > 22. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите максимальное значение S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 72: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 72: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(23, 1000) if not g(50, s, 1) and g(50, s, 2)])
# print('20)', [s for s in range(23, 1000) if not f(50, s, 1) and f(50, s, 3)])
# print('21)', [s for s in range(23, 1000) if f(50, s, 4) and not f(50, s, 2)])
Ответ:94
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 44 камней, во второй куче – S камней, S > 22. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите сумму таких значений S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(23, 1000) if not g(44, s, 1) and g(44, s, 2)])
# print('20)', [s for s in range(23, 1000) if not f(44, s, 1) and f(44, s, 3)])
# print('21)', [s for s in range(23, 1000) if f(44, s, 4) and not f(44, s, 2)])
Ответ:2926
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 44 камней, во второй куче – S камней, S > 23. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(24, 1000) if not g(44, s, 1) and g(44, s, 2)])
# print('20)', [s for s in range(24, 1000) if not f(44, s, 1) and f(44, s, 3)])
# print('21)', [s for s in range(24, 1000) if f(44, s, 4) and not f(44, s, 2)])
Ответ:45
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 44 камней, во второй куче – S камней, S > 24. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите количество таких значений S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(25, 1000) if not g(44, s, 1) and g(44, s, 2)])
# print('20)', [s for s in range(25, 1000) if not f(44, s, 1) and f(44, s, 3)])
# print('21)', [s for s in range(25, 1000) if f(44, s, 4) and not f(44, s, 2)])
Ответ:44
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 44 камней, во второй куче – S камней, S > 25. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите максимальное значение S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(26, 1000) if not g(44, s, 1) and g(44, s, 2)])
# print('20)', [s for s in range(26, 1000) if not f(44, s, 1) and f(44, s, 3)])
# print('21)', [s for s in range(26, 1000) if f(44, s, 4) and not f(44, s, 2)])
Ответ:88
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 44 камней, во второй куче – S камней, S > 26. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите сумму таких значений S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(27, 1000) if not g(44, s, 1) and g(44, s, 2)])
# print('20)', [s for s in range(27, 1000) if not f(44, s, 1) and f(44, s, 3)])
# print('21)', [s for s in range(27, 1000) if f(44, s, 4) and not f(44, s, 2)])
Ответ:2926
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 44 камней, во второй куче – S камней, S > 27. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(28, 1000) if not g(44, s, 1) and g(44, s, 2)])
# print('20)', [s for s in range(28, 1000) if not f(44, s, 1) and f(44, s, 3)])
# print('21)', [s for s in range(28, 1000) if f(44, s, 4) and not f(44, s, 2)])
Ответ:45
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 44 камней, во второй куче – S камней, S > 28. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите максимальное значение S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(29, 1000) if not g(44, s, 1) and g(44, s, 2)])
# print('20)', [s for s in range(29, 1000) if not f(44, s, 1) and f(44, s, 3)])
# print('21)', [s for s in range(29, 1000) if f(44, s, 4) and not f(44, s, 2)])
Ответ:88
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 44 камней, во второй куче – S камней, S > 29. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите сумму таких значений S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(30, 1000) if not g(44, s, 1) and g(44, s, 2)])
# print('20)', [s for s in range(30, 1000) if not f(44, s, 1) and f(44, s, 3)])
# print('21)', [s for s in range(30, 1000) if f(44, s, 4) and not f(44, s, 2)])
Ответ:2926
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 44 камней, во второй куче – S камней, S > 30. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(31, 1000) if not g(44, s, 1) and g(44, s, 2)])
# print('20)', [s for s in range(31, 1000) if not f(44, s, 1) and f(44, s, 3)])
# print('21)', [s for s in range(31, 1000) if f(44, s, 4) and not f(44, s, 2)])
Ответ:45
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 44 камней, во второй куче – S камней, S > 31. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите количество таких значений S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(32, 1000) if not g(44, s, 1) and g(44, s, 2)])
# print('20)', [s for s in range(32, 1000) if not f(44, s, 1) and f(44, s, 3)])
# print('21)', [s for s in range(32, 1000) if f(44, s, 4) and not f(44, s, 2)])
Ответ:44
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 44 камней, во второй куче – S камней, S > 32. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите максимальное значение S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(33, 1000) if not g(44, s, 1) and g(44, s, 2)])
# print('20)', [s for s in range(33, 1000) if not f(44, s, 1) and f(44, s, 3)])
# print('21)', [s for s in range(33, 1000) if f(44, s, 4) and not f(44, s, 2)])
Ответ:88
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 44 камней, во второй куче – S камней, S > 33. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите сумму таких значений S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(34, 1000) if not g(44, s, 1) and g(44, s, 2)])
# print('20)', [s for s in range(34, 1000) if not f(44, s, 1) and f(44, s, 3)])
# print('21)', [s for s in range(34, 1000) if f(44, s, 4) and not f(44, s, 2)])
Ответ:2926
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 44 камней, во второй куче – S камней, S > 34. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(35, 1000) if not g(44, s, 1) and g(44, s, 2)])
# print('20)', [s for s in range(35, 1000) if not f(44, s, 1) and f(44, s, 3)])
# print('21)', [s for s in range(35, 1000) if f(44, s, 4) and not f(44, s, 2)])
Ответ:45
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 44 камней, во второй куче – S камней, S > 35. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите максимальное значение S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(36, 1000) if not g(44, s, 1) and g(44, s, 2)])
# print('20)', [s for s in range(36, 1000) if not f(44, s, 1) and f(44, s, 3)])
# print('21)', [s for s in range(36, 1000) if f(44, s, 4) and not f(44, s, 2)])
Ответ:88
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 45 камней, во второй куче – S камней, S > 21. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите сумму таких значений S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(22, 1000) if not g(45, s, 1) and g(45, s, 2)])
# print('20)', [s for s in range(22, 1000) if not f(45, s, 1) and f(45, s, 3)])
# print('21)', [s for s in range(22, 1000) if f(45, s, 4) and not f(45, s, 2)])
Ответ:2795
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 45 камней, во второй куче – S камней, S > 22. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(23, 1000) if not g(45, s, 1) and g(45, s, 2)])
# print('20)', [s for s in range(23, 1000) if not f(45, s, 1) and f(45, s, 3)])
# print('21)', [s for s in range(23, 1000) if f(45, s, 4) and not f(45, s, 2)])
Ответ:44
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 45 камней, во второй куче – S камней, S > 23. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите количество таких значений S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(24, 1000) if not g(45, s, 1) and g(45, s, 2)])
# print('20)', [s for s in range(24, 1000) if not f(45, s, 1) and f(45, s, 3)])
# print('21)', [s for s in range(24, 1000) if f(45, s, 4) and not f(45, s, 2)])
Ответ:43
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 45 камней, во второй куче – S камней, S > 24. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите максимальное значение S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(25, 1000) if not g(45, s, 1) and g(45, s, 2)])
# print('20)', [s for s in range(25, 1000) if not f(45, s, 1) and f(45, s, 3)])
# print('21)', [s for s in range(25, 1000) if f(45, s, 4) and not f(45, s, 2)])
Ответ:86
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч три камня или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из трёх позиций: (3, 9), (6, 6), и (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 66. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 66 или меньше камней. В начальный момент в первой куче было 45 камней, во второй куче – S камней, S > 25. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите сумму таких значений S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 3, b, m - 1), f(a, b - 3, m - 1), f(a // 2 + a % 2, b , m - 1), f(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b <= 66: return m % 2 == 0
    if m == 0: return 0
    h = [g(a - 3, b, m - 1), g(a, b - 3, m - 1), g(a // 2 + a % 2, b , m - 1), g(a, b // 2 + b % 2, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(26, 1000) if not g(45, s, 1) and g(45, s, 2)])
# print('20)', [s for s in range(26, 1000) if not f(45, s, 1) and f(45, s, 3)])
# print('21)', [s for s in range(26, 1000) if f(45, s, 4) and not f(45, s, 2)])
Ответ:2795
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может выполнить ровно одно из действий: 1) уменьшить количество камней в любой одной куче на 2; 2) уменьшить количество камней в любой одной куче на 5; 3) уменьшить количество камней в любой одной куче в два раза (если количество камней нечётно, остаётся на 1 камень больше, чем убирается); 4) уменьшить количество камней в любой одной куче на остаток от деления на 3 (если остаток равен 0, уменьшают на 3); 5) уменьшить выбранную кучу на max(1, остаток от деления количества камней в этой куче на 4). Игра завершается в тот момент, когда суммарное количество камней в трёх кучах становится не более 52. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 52 или меньше камней. В начальный момент в первой куче было 24 камня, во второй куче — 24 камня, в третьей куче — S камней, где S > 12 и S ≤ 140. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, b, c, m):
    if a + b + c <= 52: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for nx in [x - 2, x - 5, (x + 1) // 2, x - (x % 3 if x % 3 else 3)]:
            if nx >= 1:
                t = [a, b, c]
                t[i] = nx
                h.append(f(t[0], t[1], t[2], m - 1))
    for i, x in enumerate((a, b, c)):
        nx = x - max(1, x % 4)
        if nx >= 1:
            t = [a, b, c]
            t[i] = nx
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(13, 141) if not f(24, 24, s, 1) and f(24, 24, s, 2)])
# print('20)', [s for s in range(13, 141) if not f(24, 24, s, 1) and f(24, 24, s, 3)])
# print('21)', [s for s in range(13, 141) if f(24, 24, s, 4) and not f(24, 24, s, 2)])
Ответ:17
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может выполнить ровно одно из действий: 1) уменьшить количество камней в любой одной куче на 2; 2) уменьшить количество камней в любой одной куче на 5; 3) уменьшить количество камней в любой одной куче в два раза (если количество камней нечётно, остаётся на 1 камень больше, чем убирается); 4) уменьшить количество камней в любой одной куче на остаток от деления на 3 (если остаток равен 0, уменьшают на 3); 5) уменьшить выбранную кучу на остаток от деления количества камней в этой куче на 5 (если остаток равен 0, уменьшают на 5). Игра завершается в тот момент, когда суммарное количество камней в трёх кучах становится не более 52. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 52 или меньше камней. В начальный момент в первой куче было 24 камня, во второй куче — 24 камня, в третьей куче — S камней, где S > 12 и S ≤ 140. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите сумму всех значений S, при которых Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, b, c, m):
    if a + b + c <= 52: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for nx in [x - 2, x - 5, (x + 1) // 2, x - (x % 3 if x % 3 else 3)]:
            if nx >= 1:
                t = [a, b, c]
                t[i] = nx
                h.append(f(t[0], t[1], t[2], m - 1))
    for i, x in enumerate((a, b, c)):
        d = x % 5 if x % 5 else 5
        nx = x - d
        if nx >= 1:
            t = [a, b, c]
            t[i] = nx
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(13, 141) if not f(24, 24, s, 1) and f(24, 24, s, 2)])
# print('20)', [s for s in range(13, 141) if not f(24, 24, s, 1) and f(24, 24, s, 3)])
# print('21)', [s for s in range(13, 141) if f(24, 24, s, 4) and not f(24, 24, s, 2)])
Ответ:35
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может выполнить ровно одно из действий: 1) уменьшить количество камней в любой одной куче на 2; 2) уменьшить количество камней в любой одной куче на 5; 3) уменьшить количество камней в любой одной куче в два раза (если количество камней нечётно, остаётся на 1 камень больше, чем убирается); 4) уменьшить количество камней в любой одной куче на остаток от деления на 3 (если остаток равен 0, уменьшают на 3); 5) уменьшить выбранную кучу на треть её текущего значения, округляя количество убираемых камней вниз. Игра завершается в тот момент, когда суммарное количество камней в трёх кучах становится не более 52. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 52 или меньше камней. В начальный момент в первой куче было 24 камня, во второй куче — 24 камня, в третьей куче — S камней, где S > 12 и S ≤ 140. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите максимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, b, c, m):
    if a + b + c <= 52: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for nx in [x - 2, x - 5, (x + 1) // 2, x - (x % 3 if x % 3 else 3)]:
            if nx >= 1:
                t = [a, b, c]
                t[i] = nx
                h.append(f(t[0], t[1], t[2], m - 1))
    for i, x in enumerate((a, b, c)):
        nx = x - (x // 3)
        if nx >= 1:
            t = [a, b, c]
            t[i] = nx
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(13, 141) if not f(24, 24, s, 1) and f(24, 24, s, 2)])
# print('20)', [s for s in range(13, 141) if not f(24, 24, s, 1) and f(24, 24, s, 3)])
# print('21)', [s for s in range(13, 141) if f(24, 24, s, 4) and not f(24, 24, s, 2)])
Ответ:18
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может выполнить ровно одно из действий: 1) уменьшить количество камней в любой одной куче на 2; 2) уменьшить количество камней в любой одной куче на 5; 3) уменьшить количество камней в любой одной куче в два раза (если количество камней нечётно, остаётся на 1 камень больше, чем убирается); 4) уменьшить количество камней в любой одной куче на остаток от деления на 3 (если остаток равен 0, уменьшают на 3); 5) выбрать две разные кучи X и Y и уменьшить кучу X на остаток от деления количества камней в куче Y на 4 (если остаток равен 0, уменьшают на 2). Игра завершается в тот момент, когда суммарное количество камней в трёх кучах становится не более 52. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 52 или меньше камней. В начальный момент в первой куче было 24 камня, во второй куче — 24 камня, в третьей куче — S камней, где S > 12 и S ≤ 140. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите количество таких значений S, при которых Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, b, c, m):
    if a + b + c <= 52: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for nx in [x - 2, x - 5, (x + 1) // 2, x - (x % 3 if x % 3 else 3)]:
            if nx >= 1:
                t = [a, b, c]
                t[i] = nx
                h.append(f(t[0], t[1], t[2], m - 1))
    p = [a, b, c]
    for i in range(3):
        for j in range(3):
            if i == j:
                continue
            q = p[j] % 4 if p[j] % 4 else 2
            nx = p[i] - q
            if nx >= 1:
                t = [a, b, c]
                t[i] = nx
                h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(13, 141) if not f(24, 24, s, 1) and f(24, 24, s, 2)])
# print('20)', [s for s in range(13, 141) if not f(24, 24, s, 1) and f(24, 24, s, 3)])
# print('21)', [s for s in range(13, 141) if f(24, 24, s, 4) and not f(24, 24, s, 2)])
Ответ:2
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может выполнить ровно одно из действий: 1) уменьшить количество камней в любой одной куче на 2; 2) уменьшить количество камней в любой одной куче на 5; 3) уменьшить количество камней в любой одной куче в два раза (если количество камней нечётно, остаётся на 1 камень больше, чем убирается); 4) уменьшить количество камней в любой одной куче на остаток от деления на 3 (если остаток равен 0, уменьшают на 3); 5) уменьшить выбранную кучу на значение d, где d = (сумма цифр количества камней в этой куче) mod 5; если d = 0, уменьшают на 2. Игра завершается в тот момент, когда суммарное количество камней в трёх кучах становится не более 52. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 52 или меньше камней. В начальный момент в первой куче было 24 камня, во второй куче — 24 камня, в третьей куче — S камней, где S > 12 и S ≤ 140. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, b, c, m):
    if a + b + c <= 52: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for nx in [x - 2, x - 5, (x + 1) // 2, x - (x % 3 if x % 3 else 3)]:
            if nx >= 1:
                t = [a, b, c]
                t[i] = nx
                h.append(f(t[0], t[1], t[2], m - 1))
    def sod(x):
        return sum(map(int, str(x)))
    for i, x in enumerate((a, b, c)):
        d = sod(x) % 5
        d = d if d else 2
        nx = x - d
        if nx >= 1:
            t = [a, b, c]
            t[i] = nx
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(13, 141) if not f(24, 24, s, 1) and f(24, 24, s, 2)])
# print('20)', [s for s in range(13, 141) if not f(24, 24, s, 1) and f(24, 24, s, 3)])
# print('21)', [s for s in range(13, 141) if f(24, 24, s, 4) and not f(24, 24, s, 2)])
Ответ:17
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч 3, 13 или 23 камня. Игра завершается в тот момент, когда в сумме в кучах будет не менее 73 камней. Победителем считается игрок, сделавший последний ход. В начальный момент в кучах было (2, S, 2S) камней, 8 <= S <= 23. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите наименьшее значение S, для которого это возможно.
def f(a, b, c, m):
    if a + b + c >= 73: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for d in (3, 13, 23):
            t = [a, b, c]
            t[i] = x + d
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, c, m):
    if a + b + c >= 73: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for d in (3, 13, 23):
            t = [a, b, c]
            t[i] = x + d
            h.append(g(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(8, 24) if not g(2, s, 2*s, 1) and g(2, s, 2*s, 2)])
# print('20)', [s for s in range(8, 24) if not f(2, s, 2*s, 1) and f(2, s, 2*s, 3)])
# print('21)', [s for s in range(8, 24) if f(2, s, 2*s, 4) and not f(2, s, 2*s, 2)])
Ответ:9
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч 3, 13 или 23 камня. Игра завершается в тот момент, когда в сумме в кучах будет не менее 73 камней. Победителем считается игрок, сделавший последний ход. В начальный момент в кучах было (2, S, 2S) камней, 9 <= S <= 23. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите количество таких значений S, когда такая ситуация возможна.
def f(a, b, c, m):
    if a + b + c >= 73: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for d in (3, 13, 23):
            t = [a, b, c]
            t[i] = x + d
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, c, m):
    if a + b + c >= 73: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for d in (3, 13, 23):
            t = [a, b, c]
            t[i] = x + d
            h.append(g(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(9, 24) if not g(2, s, 2*s, 1) and g(2, s, 2*s, 2)])
# print('20)', [s for s in range(9, 24) if not f(2, s, 2*s, 1) and f(2, s, 2*s, 3)])
# print('21)', [s for s in range(9, 24) if f(2, s, 2*s, 4) and not f(2, s, 2*s, 2)])
Ответ:7
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч 3, 13 или 23 камня. Игра завершается в тот момент, когда в сумме в кучах будет не менее 73 камней. Победителем считается игрок, сделавший последний ход. В начальный момент в кучах было (2, S, 2S) камней, 10 <= S <= 23. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна.
def f(a, b, c, m):
    if a + b + c >= 73: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for d in (3, 13, 23):
            t = [a, b, c]
            t[i] = x + d
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, c, m):
    if a + b + c >= 73: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for d in (3, 13, 23):
            t = [a, b, c]
            t[i] = x + d
            h.append(g(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(10, 24) if not g(2, s, 2*s, 1) and g(2, s, 2*s, 2)])
# print('20)', [s for s in range(10, 24) if not f(2, s, 2*s, 1) and f(2, s, 2*s, 3)])
# print('21)', [s for s in range(10, 24) if f(2, s, 2*s, 4) and not f(2, s, 2*s, 2)])
Ответ:10
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч 3, 13 или 23 камня. Игра завершается в тот момент, когда в сумме в кучах будет не менее 73 камней. Победителем считается игрок, сделавший последний ход. В начальный момент в кучах было (2, S, 2S) камней, 11 <= S <= 23. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите максимальное значение S, когда такая ситуация возможна.
def f(a, b, c, m):
    if a + b + c >= 73: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for d in (3, 13, 23):
            t = [a, b, c]
            t[i] = x + d
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, c, m):
    if a + b + c >= 73: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for d in (3, 13, 23):
            t = [a, b, c]
            t[i] = x + d
            h.append(g(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(11, 24) if not g(2, s, 2*s, 1) and g(2, s, 2*s, 2)])
# print('20)', [s for s in range(11, 24) if not f(2, s, 2*s, 1) and f(2, s, 2*s, 3)])
# print('21)', [s for s in range(11, 24) if f(2, s, 2*s, 4) and not f(2, s, 2*s, 2)])
Ответ:15
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч 3, 13 или 23 камня. Игра завершается в тот момент, когда в сумме в кучах будет не менее 73 камней. Победителем считается игрок, сделавший последний ход. В начальный момент в кучах было (2, S, 2S) камней, 12 <= S <= 23. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите количество таких значений S, когда такая ситуация возможна.
def f(a, b, c, m):
    if a + b + c >= 73: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for d in (3, 13, 23):
            t = [a, b, c]
            t[i] = x + d
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, c, m):
    if a + b + c >= 73: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for d in (3, 13, 23):
            t = [a, b, c]
            t[i] = x + d
            h.append(g(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(12, 24) if not g(2, s, 2*s, 1) and g(2, s, 2*s, 2)])
# print('20)', [s for s in range(12, 24) if not f(2, s, 2*s, 1) and f(2, s, 2*s, 3)])
# print('21)', [s for s in range(12, 24) if f(2, s, 2*s, 4) and not f(2, s, 2*s, 2)])
Ответ:4
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может увеличить количество камней ровно в одной куче: добавить 1 камень, добавить 3 камня или увеличить количество камней в этой куче в 2 раза. Игра завершается в тот момент, когда суммарное количество камней в трёх кучах становится не менее 42. Побеждает игрок, сделавший ход, после которого сумма стала не менее 42. В начальный момент в кучах было (1, S, 1S + 0) камней, где 5 <= S <= 22. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, b, c, m):
    if a + b + c >= 42: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for nx in (x + 1, x + 3, x * 2):
            t = [a, b, c]
            t[i] = nx
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(5, 23) if not f(1, s, 1*s + 0, 1) and f(1, s, 1*s + 0, 2)])
# print('20)', [s for s in range(5, 23) if not f(1, s, 1*s + 0, 1) and f(1, s, 1*s + 0, 3)])
# print('21)', [s for s in range(5, 23) if f(1, s, 1*s + 0, 4) and not f(1, s, 1*s + 0, 2)])
Ответ:21
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может увеличить количество камней ровно в одной куче: добавить 2 камень, добавить 3 камня или увеличить количество камней в этой куче в 2 раза. Игра завершается в тот момент, когда суммарное количество камней в трёх кучах становится не менее 42. Побеждает игрок, сделавший ход, после которого сумма стала не менее 42. В начальный момент в кучах было (3, S, 1S + 0) камней, где 3 <= S <= 20. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, b, c, m):
    if a + b + c >= 42: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for nx in (x + 2, x + 3, x * 2):
            t = [a, b, c]
            t[i] = nx
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(3, 21) if not f(3, s, 1*s + 0, 1) and f(3, s, 1*s + 0, 2)])
# print('20)', [s for s in range(3, 21) if not f(3, s, 1*s + 0, 1) and f(3, s, 1*s + 0, 3)])
# print('21)', [s for s in range(3, 21) if f(3, s, 1*s + 0, 4) and not f(3, s, 1*s + 0, 2)])
Ответ:20
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может увеличить количество камней ровно в одной куче: добавить 2 камень, добавить 3 камня или увеличить количество камней в этой куче в 2 раза. Игра завершается в тот момент, когда суммарное количество камней в трёх кучах становится не менее 42. Побеждает игрок, сделавший ход, после которого сумма стала не менее 42. В начальный момент в кучах было (3, S, 1S + 0) камней, где 4 <= S <= 20. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, b, c, m):
    if a + b + c >= 42: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for nx in (x + 2, x + 3, x * 2):
            t = [a, b, c]
            t[i] = nx
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(4, 21) if not f(3, s, 1*s + 0, 1) and f(3, s, 1*s + 0, 2)])
# print('20)', [s for s in range(4, 21) if not f(3, s, 1*s + 0, 1) and f(3, s, 1*s + 0, 3)])
# print('21)', [s for s in range(4, 21) if f(3, s, 1*s + 0, 4) and not f(3, s, 1*s + 0, 2)])
Ответ:20
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может увеличить количество камней ровно в одной куче: добавить 2 камень, добавить 3 камня или увеличить количество камней в этой куче в 2 раза. Игра завершается в тот момент, когда суммарное количество камней в трёх кучах становится не менее 42. Побеждает игрок, сделавший ход, после которого сумма стала не менее 42. В начальный момент в кучах было (3, S, 1S + 0) камней, где 5 <= S <= 22. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, b, c, m):
    if a + b + c >= 42: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for nx in (x + 2, x + 3, x * 2):
            t = [a, b, c]
            t[i] = nx
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(5, 23) if not f(3, s, 1*s + 0, 1) and f(3, s, 1*s + 0, 2)])
# print('20)', [s for s in range(5, 23) if not f(3, s, 1*s + 0, 1) and f(3, s, 1*s + 0, 3)])
# print('21)', [s for s in range(5, 23) if f(3, s, 1*s + 0, 4) and not f(3, s, 1*s + 0, 2)])
Ответ:20
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может увеличить количество камней ровно в одной куче: добавить 2 камень, добавить 3 камня или увеличить количество камней в этой куче в 2 раза. Игра завершается в тот момент, когда суммарное количество камней в трёх кучах становится не менее 52. Побеждает игрок, сделавший ход, после которого сумма стала не менее 52. В начальный момент в кучах было (3, S, 1S + 0) камней, где 1 <= S <= 16. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, b, c, m):
    if a + b + c >= 52: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for nx in (x + 2, x + 3, x * 2):
            t = [a, b, c]
            t[i] = nx
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 17) if not f(3, s, 1*s + 0, 1) and f(3, s, 1*s + 0, 2)])
# print('20)', [s for s in range(1, 17) if not f(3, s, 1*s + 0, 1) and f(3, s, 1*s + 0, 3)])
# print('21)', [s for s in range(1, 17) if f(3, s, 1*s + 0, 4) and not f(3, s, 1*s + 0, 2)])
Ответ:16
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может увеличить количество камней ровно в одной куче: добавить 2 камень, добавить 3 камня или увеличить количество камней в этой куче в 2 раза. Игра завершается в тот момент, когда суммарное количество камней в трёх кучах становится не менее 52. Побеждает игрок, сделавший ход, после которого сумма стала не менее 52. В начальный момент в кучах было (3, S, 1S + 0) камней, где 1 <= S <= 18. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, b, c, m):
    if a + b + c >= 52: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for nx in (x + 2, x + 3, x * 2):
            t = [a, b, c]
            t[i] = nx
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(1, 19) if not f(3, s, 1*s + 0, 1) and f(3, s, 1*s + 0, 2)])
# print('20)', [s for s in range(1, 19) if not f(3, s, 1*s + 0, 1) and f(3, s, 1*s + 0, 3)])
# print('21)', [s for s in range(1, 19) if f(3, s, 1*s + 0, 4) and not f(3, s, 1*s + 0, 2)])
Ответ:16
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может увеличить количество камней ровно в одной куче: добавить 2 камень, добавить 3 камня или увеличить количество камней в этой куче в 2 раза. Игра завершается в тот момент, когда суммарное количество камней в трёх кучах становится не менее 52. Побеждает игрок, сделавший ход, после которого сумма стала не менее 52. В начальный момент в кучах было (3, S, 1S + 0) камней, где 2 <= S <= 18. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, b, c, m):
    if a + b + c >= 52: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for nx in (x + 2, x + 3, x * 2):
            t = [a, b, c]
            t[i] = nx
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(2, 19) if not f(3, s, 1*s + 0, 1) and f(3, s, 1*s + 0, 2)])
# print('20)', [s for s in range(2, 19) if not f(3, s, 1*s + 0, 1) and f(3, s, 1*s + 0, 3)])
# print('21)', [s for s in range(2, 19) if f(3, s, 1*s + 0, 4) and not f(3, s, 1*s + 0, 2)])
Ответ:16
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может увеличить количество камней ровно в одной куче: добавить 2 камень, добавить 3 камня или увеличить количество камней в этой куче в 2 раза. Игра завершается в тот момент, когда суммарное количество камней в трёх кучах становится не менее 52. Побеждает игрок, сделавший ход, после которого сумма стала не менее 52. В начальный момент в кучах было (3, S, 1S + 0) камней, где 3 <= S <= 20. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, b, c, m):
    if a + b + c >= 52: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for nx in (x + 2, x + 3, x * 2):
            t = [a, b, c]
            t[i] = nx
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(3, 21) if not f(3, s, 1*s + 0, 1) and f(3, s, 1*s + 0, 2)])
# print('20)', [s for s in range(3, 21) if not f(3, s, 1*s + 0, 1) and f(3, s, 1*s + 0, 3)])
# print('21)', [s for s in range(3, 21) if f(3, s, 1*s + 0, 4) and not f(3, s, 1*s + 0, 2)])
Ответ:16
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может увеличить количество камней ровно в одной куче: добавить 2 камень, добавить 3 камня или увеличить количество камней в этой куче в 2 раза. Игра завершается в тот момент, когда суммарное количество камней в трёх кучах становится не менее 52. Побеждает игрок, сделавший ход, после которого сумма стала не менее 52. В начальный момент в кучах было (3, S, 1S + 0) камней, где 4 <= S <= 20. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, b, c, m):
    if a + b + c >= 52: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for nx in (x + 2, x + 3, x * 2):
            t = [a, b, c]
            t[i] = nx
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(4, 21) if not f(3, s, 1*s + 0, 1) and f(3, s, 1*s + 0, 2)])
# print('20)', [s for s in range(4, 21) if not f(3, s, 1*s + 0, 1) and f(3, s, 1*s + 0, 3)])
# print('21)', [s for s in range(4, 21) if f(3, s, 1*s + 0, 4) and not f(3, s, 1*s + 0, 2)])
Ответ:16
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат три кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может увеличить количество камней ровно в одной куче: добавить 2 камень, добавить 3 камня или увеличить количество камней в этой куче в 2 раза. Игра завершается в тот момент, когда суммарное количество камней в трёх кучах становится не менее 52. Побеждает игрок, сделавший ход, после которого сумма стала не менее 52. В начальный момент в кучах было (3, S, 1S + 0) камней, где 5 <= S <= 22. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, b, c, m):
    if a + b + c >= 52: return m % 2 == 0
    if m == 0: return 0
    h = []
    for i, x in enumerate((a, b, c)):
        for nx in (x + 2, x + 3, x * 2):
            t = [a, b, c]
            t[i] = nx
            h.append(f(t[0], t[1], t[2], m - 1))
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(5, 23) if not f(3, s, 1*s + 0, 1) and f(3, s, 1*s + 0, 2)])
# print('20)', [s for s in range(5, 23) if not f(3, s, 1*s + 0, 1) and f(3, s, 1*s + 0, 3)])
# print('21)', [s for s in range(5, 23) if f(3, s, 1*s + 0, 4) and not f(3, s, 1*s + 0, 2)])
Ответ:16
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в три раза. Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 65. Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, при которой в кучах находится 65 или больше камней. В начальный момент в первой куче было шесть камней, во второй куче – S камней; 1 ≤ S ≤ 58. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна.
def f(a, b, m):
    if a + b >= 65: return m % 2 == 0
    if m == 0: return 0
    h = [f(a + 1, b, m - 1), f(a, b + 1, m - 1),
         f(a * 3, b, m - 1), f(a, b * 3, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
def g(a, b, m):
    if a + b >= 65: return m % 2 == 0
    if m == 0: return 0
    h = [g(a + 1, b, m - 1), g(a, b + 1, m - 1),
         g(a * 3, b, m - 1), g(a, b * 3, m - 1)]
    return any(h) if m % 2 != 0 else any(h)  # 19: после неудачного хода Пети
print('19)', [s for s in range(1, 59) if not g(6, s, 1) and g(6, s, 2)])
# print('20)', [s for s in range(1, 59) if not f(6, s, 1) and f(6, s, 3)])
# print('21)', [s for s in range(1, 59) if f(6, s, 4) and not f(6, s, 2)])
Ответ:7
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: − убрать из кучи 2 камня, − убрать из кучи 7 камней, − уменьшить количество камней в куче в 3 раза (количество камней, полученное при делении, округляется до меньшего). Например, из кучи в 20 камней за один ход можно получить кучу из 18, 13 или 6 камней. Игра завершается в тот момент, когда количество камней в куче становится не более 20 007. Победителем считается игрок, сделавший последний ход, т.е. первым получивший в куче 20 007 камней или меньше. В начальный момент в куче было S камней; S > 20 007. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите максимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
def f(a, m):
    if a <= 20007: return m % 2 == 0
    if m == 0: return 0
    h = [f(a - 2, m - 1), f(a - 7, m - 1), f(a // 3, m - 1)]
    return any(h) if m % 2 != 0 else all(h)
print('19)', [s for s in range(20008, 60039) if not f(s, 1) and f(s, 2)])
# print('20)', [s for s in range(20008, 60039) if not f(s, 1) and f(s, 3)])
# print('21)', [s for s in range(20008, 60039) if f(s, 4) and not f(s, 2)])
Ответ:60025
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: − добавить в кучу 3 камня; − добавить в кучу 5 камней; − увеличить количество камней в куче в 2 раза. Например, из кучи в 10 камней за один ход можно получить кучу из 13, 15 или 20 камней. Тот, кто получает кучу, в которой 63 или более камней, проигрывает. Укажите наибольшее значение S ≤ 40, при котором у Пети нет выигрышной стратегии.
Метод динамического программирования. Позиция — «проигрышная» (П), если все ходы из неё ведут в выигрышные позиции противника. «Выигрышная» (В) — если хотя бы один ход ведёт в П.

Позиция ≥ 63: тот, кто СЮДА ПОПАЛ, проигрывает. Значит S ≥ 63 — проигрышная.

Считаем снизу:
S=3: ходы → 6,8,6. S=6,8 — выигрышные → S=3 — П.
S=4: ходы → 7,9,8. Все В → S=4 П.
S=5: ходы → 8,10,10. Все В → S=5 П.
S=6: ход → 3(П)! → S=6 В.
...
S=29,30,31 — проигрышные.
S=32..40 — выигрышные.

Наибольшее П ≤ 40 = 31.

Ответ: 31.
Ответ:31
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может:
− добавить в кучу 2 камня;
− добавить в кучу 5 камней;
− увеличить количество камней в куче в 2 раза.
Тот, кто получает кучу, в которой 50 или более камней, проигрывает.

Укажите наибольшее значение S ≤ 30, при котором у Пети нет выигрышной стратегии.
status = {}
for s in range(200):
    if s >= 50: status[s] = False  # проигрышная позиция
for s in range(49, 0, -1):
    moves = [s+2, s+5, s*2]
    status[s] = any(
        m >= 50 or (m in status and not status[m])
        for m in moves
    )
losing = [s for s in range(1,31) if not status[s]]
print(max(losing))  # 24
Проигрышные позиции ≤ 30: 2, 5, 6, 9, 13, 16, 17, 20, 23, 24.
Ответ:24