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

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

Задача 1#19979

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

Показать ответ и решение
from functools import lru_cache  
from math import sqrt  
 
def moves(h):  
    a, b= h  
    return (a + 1, b + 2), (a, b + 1), (a + 10, b + 1)  
 
@lru_cache(None)  
def f(h):  
    if sqrt(h[0] ** 2 + h[1] ** 2) > 30:  
        return "END"  
    if any((f(x) == "END") for x in moves(h)):  
        return "P1"  
    if all((f(x) == "P1") for x in moves(h)):  
        return "V1"  
    if any((f(x) == "V1") for x in moves(h)):  
        return "P2"  
    if all((f(x) == "P2" or f(x) == "P1") for x in moves(h)):  
        return "V2"  
 
for s in range(25, 0, -1):  
    h = 15, s  
    if f(h) == "V2":  
        print(s, "V2")

Ответ: 10

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

Задача 2#19978

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

Показать ответ и решение
from functools import lru_cache  
from math import sqrt  
 
def moves(h):  
    a, b= h  
    return (a + 1, b + 2), (a, b + 1), (a + 10, b + 1)  
 
@lru_cache(None)  
def f(h):  
    if sqrt(h[0] ** 2 + h[1] ** 2) > 30:  
        return "END"  
    if any((f(x) == "END") for x in moves(h)):  
        return "P1"  
    if all((f(x) == "P1") for x in moves(h)):  
        return "V1"  
    if any((f(x) == "V1") for x in moves(h)):  
        return "P2"  
    if all((f(x) == "P2" or f(x) == "P1") for x in moves(h)):  
        return "V2"  
 
for s in range(25, 0, -1):  
    h = 15, s  
    if f(h) == "P2":  
        print(s, "P2")

Ответ: 11

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

Задача 3#19977

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

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

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

Показать ответ и решение
from functools import lru_cache  
from math import sqrt  
 
def moves(h):  
    a, b= h  
    return (a + 1, b + 2), (a, b + 1), (a + 10, b + 1)  
 
@lru_cache(None)  
def f(h):  
    if sqrt(h[0] ** 2 + h[1] ** 2) > 30:  
        return "END"  
    if any((f(x) == "END") for x in moves(h)):  
        return "P1"  
    if all((f(x) == "P1") for x in moves(h)):  
        return "V1"  
    if any((f(x) == "V1") for x in moves(h)):  
        return "P2"  
    if all((f(x) == "P2" or f(x) == "P1") for x in moves(h)):  
        return "V2"  
 
for s in range(25, 0, -1):  
    h = 15, s  
    if f(h) == "P1":  
        print(s, "P1")

Ответ: 16

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

Задача 4#19976

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

Показать ответ и решение
from functools import lru_cache  
from math import sqrt  
 
def moves(h):  
    a, b= h  
    return (a + 1, b + 2), (a, b + 1)  
 
@lru_cache(None)  
def f(h):  
    if sqrt(h[0] ** 2 + h[1] ** 2) > 20:  
        return "END"  
    if any((f(x) == "END") for x in moves(h)):  
        return "P1"  
    if all((f(x) == "P1") for x in moves(h)):  
        return "V1"  
    if any((f(x) == "V1") for x in moves(h)):  
        return "P2"  
    if all((f(x) == "P2" or f(x) == "P1") for x in moves(h)):  
        return "V2"  
 
for s in range(17, 0, -1):  
    h = 10, s  
    if f(h) == "V2":  
        print(s, "V2")

Ответ: 11

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

Задача 5#19975

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

Показать ответ и решение
from functools import lru_cache  
from math import sqrt  
 
def moves(h):  
    a, b= h  
    return (a + 1, b + 2), (a, b + 1)  
 
@lru_cache(None)  
def f(h):  
    if sqrt(h[0] ** 2 + h[1] ** 2) > 20:  
        return "END"  
    if any((f(x) == "END") for x in moves(h)):  
        return "P1"  
    if all((f(x) == "P1") for x in moves(h)):  
        return "V1"  
    if any((f(x) == "V1") for x in moves(h)):  
        return "P2"  
    if all((f(x) == "P2" or f(x) == "P1") for x in moves(h)):  
        return "V2"  
 
for s in range(17, 0, -1):  
    h = 10, s  
    if f(h) == "P2":  
        print(s, "P2")

Ответ: 12

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

Задача 6#19974

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

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

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

Показать ответ и решение
from functools import lru_cache  
from math import sqrt  
 
def moves(h):  
    a, b= h  
    return (a + 1, b + 2), (a, b + 1)  
 
@lru_cache(None)  
def f(h):  
    if sqrt(h[0] ** 2 + h[1] ** 2) > 20:  
        return "END"  
    if any((f(x) == "END") for x in moves(h)):  
        return "P1"  
    if all((f(x) == "P1") for x in moves(h)):  
        return "V1"  
    if any((f(x) == "V1") for x in moves(h)):  
        return "P2"  
    if all((f(x) == "P2" or f(x) == "P1") for x in moves(h)):  
        return "V2"  
 
for s in range(17, 0, -1):  
    h = 10, s  
    if f(h) == "P1":  
        print(s, "P1")

Ответ: 15

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

Задача 7#19973

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

Показать ответ и решение
from functools import lru_cache

def moves(h):
    a, b, c, d = h
    return (a + 2, b, c, d), (a, b + 2, c, d), (a, b, c + 2, d),
    (a, b, c, d + 2), (a * 3, b, c, d), (a, b * 3, c, d),
    (a, b, c * 3, d), (a, b, c, d * 3)

@lru_cache(None)
def f(h):
    if sum(h) > 80:
        return "V0"
    if sum(h) >= 60:
        return "END"
    if any((f(x) == "END") for x in moves(h)):
        return "P1"
    if all((f(x) == "P1") for x in moves(h)):
        return "V1"
    if any((f(x) == "V1") for x in moves(h)):
        return "P2"
    if all((f(x) == "P2" or f(x) == "P1" or f(x) == "V0") for x in moves(h)):
        return "V2"

for s in range(29, 0, -1):
    h = 10, 10, 10, s
    if f(h) == "V2":
        print(s, "V2")

Ответ: 1

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

Задача 8#19972

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

Показать ответ и решение
from functools import lru_cache

def moves(h):
    a, b, c, d = h
    return (a + 2, b, c, d), (a, b + 2, c, d), (a, b, c + 2, d),
    (a, b, c, d + 2), (a * 3, b, c, d), (a, b * 3, c, d),
    (a, b, c * 3, d), (a, b, c, d * 3)

@lru_cache(None)
def f(h):
    if sum(h) > 80:
        return "V0"
    if sum(h) >= 60:
        return "END"
    if any((f(x) == "END") for x in moves(h)):
        return "P1"
    if all((f(x) == "P1") for x in moves(h)):
        return "V1"
    if any((f(x) == "V1") for x in moves(h)):
        return "P2"
    if all((f(x) == "P2" or f(x) == "P1" or f(x) == "V0") for x in moves(h)):
        return "V2"

for s in range(29, 0, -1):
    h = 10, 10, 10, s
    if f(h) == "P2":
        print(s, "P2")

Ответ: 2

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

Задача 9#19971

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

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

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

Показать ответ и решение
from functools import lru_cache

def moves(h):
    a, b, c, d = h
    return (a + 2, b, c, d), (a, b + 2, c, d), (a, b, c + 2, d), \
    (a, b, c, d + 2), (a * 3, b, c, d), (a, b * 3, c, d), \
    (a, b, c * 3, d), (a, b, c, d * 3)

@lru_cache(None)
def f(h):
    if sum(h) > 80:
        return "V0"
    if sum(h) >= 60:
        return "END"
    if any((f(x) == "END") for x in moves(h)):
        return "P1"
    if all((f(x) == "P1") for x in moves(h)):
        return "V1"
    if any((f(x) == "V1") for x in moves(h)):
        return "P2"
    if all((f(x) == "P2" or f(x) == "P1" or f(x) == "V0") for x in moves(h)):
        return "V2"

for s in range(29, 0, -1):
    h = 10, 10, 10, s
    if f(h) == "P1":
        print(s, "P1")

Ответ: 10

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

Задача 10#19970

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

Показать ответ и решение
from functools import lru_cache  
 
def moves(h):  
    a, b, c, d = h  
    return (a + 2, b, c, d), (a, b + 2, c, d), (a, b, c + 2, d), (a, b, c, d + 2), (a * 3, b, c, d), (a, b * 3, c, d), (a, b, c * 3, d), (a, b, c, d * 3)  
 
@lru_cache(None)  
def f(h):  
    if sum(h) >= 70:  
        return "END"  
    if any((f(x) == "END") for x in moves(h)):  
        return "P1"  
    if all((f(x) == "P1") for x in moves(h)):  
        return "V1"  
    if any((f(x) == "V1") for x in moves(h)):  
        return "P2"  
    if all((f(x) == "P2" or f(x) == "P1") for x in moves(h)):  
        return "V2"  
 
for s in range(39, 0, -1):  
    h = 9, 6, 8, s  
    if f(h) == "V2":  
        print(s, "V2")

Ответ: 14

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

Задача 11#19969

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

Показать ответ и решение
from functools import lru_cache  
 
def moves(h):  
    a, b, c, d = h  
    return (a + 2, b, c, d), (a, b + 2, c, d), (a, b, c + 2, d), (a, b, c, d + 2), (a * 3, b, c, d), (a, b * 3, c, d), (a, b, c * 3, d), (a, b, c, d * 3)  
 
@lru_cache(None)  
def f(h):  
    if sum(h) >= 70:  
        return "END"  
    if any((f(x) == "END") for x in moves(h)):  
        return "P1"  
    if all((f(x) == "P1") for x in moves(h)):  
        return "V1"  
    if any((f(x) == "V1") for x in moves(h)):  
        return "P2"  
    if all((f(x) == "P2" or f(x) == "P1") for x in moves(h)):  
        return "V2"  
 
for s in range(39, 0, -1):  
    h = 9, 6, 8, s  
    if f(h) == "P2":  
        print(s, "P2")

Ответ: 5

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

Задача 12#19968

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

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

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

Показать ответ и решение
from functools import lru_cache  
 
def moves(h):  
    a, b, c, d = h  
    return (a + 2, b, c, d), (a, b + 2, c, d), (a, b, c + 2, d), (a, b, c, d + 2), (a * 3, b, c, d), (a, b * 3, c, d), (a, b, c * 3, d), (a, b, c, d * 3)  
 
@lru_cache(None)  
def f(h):  
    if sum(h) >= 70:  
        return "END"  
    if any((f(x) == "END") for x in moves(h)):  
        return "P1"  
    if all((f(x) == "P1") for x in moves(h)):  
        return "V1"  
    if any((f(x) == "V1") for x in moves(h)):  
        return "P2"  
    if all((f(x) == "P2" or f(x) == "P1") for x in moves(h)):  
        return "V2"  
 
for s in range(39, 0, -1):  
    h = 9, 6, 8, s  
    if f(h) == "P1":  
        print(s, "P1")

Ответ: 16

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

Задача 13#19967

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

Показать ответ и решение
from functools import lru_cache  
 
def moves(h):  
    a, b, c = h  
    return (a + 1, b, c), (a, b + 1, c), (a, b, c + 1), (a * 2, b, c), (a, b * 2, c), (a, b, c * 2)  
 
@lru_cache(None)  
def f(h):  
    if sum(h) >= 70:  
        return "END"  
    if any((f(x) == "END") for x in moves(h)):  
        return "P1"  
    if all((f(x) == "P1") for x in moves(h)):  
        return "V1"  
    if any((f(x) == "V1") for x in moves(h)):  
        return "P2"  
    if all((f(x) == "P2" or f(x) == "P1") for x in moves(h)):  
        return "V2"  
 
for s in range(39, 0, -1):  
    h = 20, 10, s  
    if f(h) == "V2":  
        print(s, "V2")

Ответ: 16

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

Задача 14#19966

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

Показать ответ и решение
from functools import lru_cache  
 
def moves(h):  
    a, b, c = h  
    return (a + 1, b, c), (a, b + 1, c), (a, b, c + 1), (a * 2, b, c), (a, b * 2, c), (a, b, c * 2)  
 
@lru_cache(None)  
def f(h):  
    if sum(h) >= 70:  
        return "END"  
    if any((f(x) == "END") for x in moves(h)):  
        return "P1"  
    if all((f(x) == "P1") for x in moves(h)):  
        return "V1"  
    if any((f(x) == "V1") for x in moves(h)):  
        return "P2"  
    if all((f(x) == "P2" or f(x) == "P1") for x in moves(h)):  
        return "V2"  
 
for s in range(39, 0, -1):  
    h = 20, 10, s  
    if f(h) == "P2":  
        print(s, "P2")

Ответ: 9

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

Задача 15#19965

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

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

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

Показать ответ и решение
from functools import lru_cache  
 
def moves(h):  
    a, b, c = h  
    return (a + 1, b, c), (a, b + 1, c), (a, b, c + 1), (a * 2, b, c), (a, b * 2, c), (a, b, c * 2)  
 
@lru_cache(None)  
def f(h):  
    if sum(h) >= 70:  
        return "END"  
    if any((f(x) == "END") for x in moves(h)):  
        return "P1"  
    if all((f(x) == "P1") for x in moves(h)):  
        return "V1"  
    if any((f(x) == "V1") for x in moves(h)):  
        return "P2"  
    if all((f(x) == "P2" or f(x) == "P1") for x in moves(h)):  
        return "V2"  
 
for s in range(39, 0, -1):  
    h = 20, 10, s  
    if f(h) == "P1":  
        print(s, "P1")

Ответ: 20
Рулетка
Вы можете получить скидку в рулетке!