Ошибка.
Попробуйте повторить позже
Для правил, описанных в задании известно, что , , .
Кто побеждает при правильной игре? В ответе запишите номер игрока.
Ходы для каждого из игроков различны, значит стоит рассматривать выигрышные проигрышные позиции для двух игроков. Иначе говоря, считать не стандартные state[x][y], а state[x][y][type]. Анализ позиций приводит к ответу: выигрывает второй. Позиция S = 20, для первого игрока является позицией типа LOSE5
from functools import lru_cache def h1(n): if (n >= 10): return n - 1, n - 10 else: return n - 1, n - 1 def h2(n): if (n >= 3): return n - 2, n - 3 else: return n - 2, n - 2 @lru_cache(None) def f1(n): if (n == 0): return ’END’ if (any(f2(x) == ’END’ for x in h1(n))): return ’WIN1’ if (all(f2(x) == ’WIN1’ for x in h1(n))): return ’LOSE1’ if (any(f2(x) == ’LOSE1’ for x in h1(n))): return ’WIN2’ if (all(f2(x) == ’WIN1’ or f2(x) == ’WIN2’ for x in h1(n))): return ’LOSE2’ if (any(f2(x) == ’LOSE2’ for x in h1(n))): return ’WIN3’ if (all(f2(x) == ’WIN1’ or f2(x) == ’WIN2’ or \ f2(x) == ’WIN3’ for x in h1(n))): return ’LOSE3’ if (any(f2(x) == ’LOSE3’ for x in h1(n))): return ’WIN4’ if (all(f2(x) == ’WIN1’ or f2(x) == ’WIN2’ \ or f2(x) == ’WIN3’ or f2(x) == ’WIN4’ for x in h1(n))): return ’LOSE4’ if (any(f2(x) == ’LOSE4’ for x in h1(n))): return ’WIN5’ if ( all(f2(x) == ’WIN1’ or f2(x) == ’WIN2’ or f2(x) == ’WIN3’ \ or f2(x) == ’WIN4’ or f2(x) == ’WIN5’ for x in h1(n))): return ’LOSE5’ if (any(f2(x) == ’LOSE5’ for x in h1(n))): return ’WIN6’ @lru_cache(None) def f2(n): if (n < 2): return ’END’ if (any(f1(x) == ’END’ for x in h2(n))): return ’WIN1’ if (all(f1(x) == ’WIN1’ for x in h2(n))): return ’LOSE1’ if (any(f1(x) == ’LOSE1’ for x in h2(n))): return ’WIN2’ if (all(f1(x) == ’WIN1’ or f1(x) == ’WIN2’ for x in h2(n))): return ’LOSE2’ if (any(f1(x) == ’LOSE2’ for x in h2(n))): return ’WIN3’ if (all(f1(x) == ’WIN1’ or f1(x) == ’WIN2’ or \ f1(x) == ’WIN3’ for x in h2(n))): return ’LOSE3’ if (any(f1(x) == ’LOSE3’ for x in h2(n))): return ’WIN4’ if (all(f1(x) == ’WIN1’ or f1(x) == ’WIN2’ or f1(x) == ’WIN3’ or \ f1(x) == ’WIN4’ for x in h2(n))): return ’LOSE4’ if (any(f1(x) == ’LOSE4’ for x in h2(n))): return ’WIN5’ if ( all(f1(x) == ’WIN1’ or f1(x) == ’WIN2’ or f1(x) == ’WIN3’ or \ f1(x) == ’WIN4’ or f1(x) == ’WIN5’ for x in h2(n))): return ’LOSE5’ if (any(f1(x) == ’LOSE5’ for x in h2(n))): return ’WIN6’ print(f1(20))
Специальные программы
Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!
Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.
Бесплатное обучение
в Школково
Для детей ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Брянской областей, а также школьникам, находящимся в пунктах временного размещения Крыма обучение на платформе бесплатное.
Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».
Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ или олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!
Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!