Решение 19 21 задания егэ по информатике 2021 на питоне

Продолжаем наш видеокурс по подготовке к ЕГЭ по информатике 2023!

Сегодня разберём задачи из 19, 20 и 21 задания ЕГЭ по информатике. Для этих задач существует спасительный шаблон на Python, который позволяет получить на них правильные ответы и затратить минимум сил и времени.

Приступим к первой серии задач из демоверсии ЕГЭ по информатике 2021 года.

Задание 19 (Демо 2021)

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

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

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

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

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

Решение:

Решим задачу с помощью шаблона на языке программирования Python. Если хотите ознакомится с аналитическим решением задач на теорию игр, можете посмотреть мои статьи по 19 Заданию, 20 Заданию, 21 Заданию. Но с помощью шаблонов на экзамене решать быстрее и легче.

Введём параметр p, который будет олицетворять позицию игры (ход).

Начальная позиция Ход Пети Ход Вани Ход Пети Ход Вани Ход Пети
p 1 2 3 4 5 6
def F(x, y, p):
    if x + y >= 77 and p==3: return True
    if x + y < 77 and p==3: return False

    return F(x+1, y, p+1) or F(x*2, y, p+1) or F(x, y+1, p+1) or F(x, y*2, p+1)
  

for s in range(1, 70):
    if F(s, 7, 1):
        print(s)

Заводим функцию F. Она принимает параметры: x — количество камней в одной куче, y — в другой, p-позиция игры.

Дальше описываем победу. Если x+y>=77 и позиция равна 3 (1 Ход Вани), то возвращаем True, что означает победу.

Если, позиция уже равна 3, но сумарное количество камней меньше, чем должно быть для победы, то возвращаем False (проигрыш).

Если мы не вышли на первых двух условиях, то, значит, продолжаем прокручивать ходы, рекурсивно запускаем функцию F.

Т.к. здесь формулировка: «Известно, что Ваня выиграл своим первым ходом после неудачного первого
хода Пети.», то между функциями ставим союз ИЛИ (or).

В конце перебираем все возможные значения для s через цикл for, ищём те значения, которые подходят по условию задачи. Значение p всегда увеличиваем на 1.

Ответ: 18

Задание 20 (Демо 2021)

Для игры, описанной в предыдущем задании, найдите два таких значения S,
при которых у Пети есть выигрышная стратегия, причём одновременно
выполняются два условия:

− Петя не может выиграть за один ход;

− Петя может выиграть своим вторым ходом независимо от того, как
будет ходить Ваня.

Найденные значения запишите в ответе в порядке возрастания.

Решение:

Легко переделать из прошлой задачи.

def F(x, y, p):
    if x + y >= 77 and p==4: return True
    if x + y < 77 and p==4: return False
    if x + y >= 77: return False

    if p%2==0:
        return F(x+1, y, p+1) and F(x*2, y, p+1) and F(x, y+1, p+1) and F(x, y*2, p+1)
    else:
        return F(x+1, y, p+1) or F(x*2, y, p+1) or F(x, y+1, p+1) or F(x, y*2, p+1)
  

for s in range(1, 70):
    if F(s, 7, 1):
        print(s)

Теперь должен выигрывать Петя на своём втором ходе. Поэтому в условиях ставим позицию p=4.

Добавляется третье условие. Если кто-то выиграл, но на первых двух условиях мы не вышли из функции, то, значит, выиграл не тот, кто нам нужен, следовательно, возвращаем Fasle.

Здесь вопрос отличается от 19 задания. Здесь Петя должен побеждать при любом ходе соперника, а не при одном неудачном ходе Вани, поэтому добавляется ещё условие.

Для чётных p (это ходы Пети), возвращаем разные ходы через and, т.к. он должен побеждать в любом случае.

Для нечётных p (это ходы Вани), возвращаем ходы через or.

Ответ:

Задание 21 (Демо 2021)

Для игры, описанной в задании 19, найдите минимальное значение S, при
котором одновременно выполняются два условия:

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

– у Вани нет стратегии, которая позволит ему гарантированно
выиграть первым ходом.

Решение:

Опять используем прошлый шаблон, но немного модернизируем.

def F(x, y, p):
    if x + y >= 77 and (p==3 or p==5): return True
    if x + y < 77 and p==5: return False
    if x + y >= 77: return False

    if p%2==1:
        return F(x+1, y, p+1) and F(x*2, y, p+1) and F(x, y+1, p+1) and  F(x, y*2, p+1)
    else:
         return F(x+1, y, p+1) or F(x*2, y, p+1) or F(x, y+1, p+1) or  F(x, y*2, p+1)


def F1(x, y, p):
    if x + y >= 77 and p==3: return True
    if x + y < 77 and p==3: return False
    if x + y >= 77: return False

    if p%2==1:
        return F1(x+1, y, p+1) and F1(x*2, y, p+1) and F1(x, y+1, p+1) and  F1(x, y*2, p+1)
    else:
         return F1(x+1, y, p+1) or F1(x*2, y, p+1) or F1(x, y+1, p+1) or  F1(x, y*2, p+1)

for s in range(1, 70):
    if F(s, 7, 1):
        print(s)

print()

for s in range(1, 70):
    if F1(s, 7, 1):
        print(s)

Здесь Ваня должен выигрывать либо на первом своём ходе (p=3), либо на втором своём ходе (p=5).

Т.к. Ваня не должен гарантированно выиграть своим первым ходом, то мы создаём ещё одну функцию F1, похожую на основную функцию F, которая вычисляет, когда Ваня именно гарантированно выигрывает на своём первом ходе (p=3). И, затем, мы из тех чисел, которые получились в первой функции F, исключаем числа, которые получились во второй функции F1.

В первой функции получилось 30,33, а во второй результатов нет. Получается ответ 30.

Ответ: 30

Следущая вариация задач отличается от первой лишь задачей в 19-ом задании. Рассмотрим демоверсию ЕГЭ по информатике 2022. Так же в этой серии задач будет одна куча, но из-за этого шаблон практически никак не меняется.

Задание 19 (Демо 2022)

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

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

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

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

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

Решение:

Здесь вопрос отличается от прошлой 19-ой задачи. Здесь Петя должен выиграть в любом случае. Мы эту задачу можем воспринимать, как 20-ую из демоверсии 2021. Ведь там тоже игроку нужно обязательно было побеждать. Осталось написать шаблон с соответствующими параметрами.

def F(x, p):
    if x>=29 and p==3: return True
    if x<29 and p==3: return False
    if x>=29: return False

    if p%2==1:
        return F(x+1, p+1) and F(x*2, p+1)
    else:
         return F(x+1, p+1) or F(x*2, p+1)

for s in range(1, 29):
    if F(s, 1):
        print(s)

Заводим функцию F. Т.к. у нас одна куча, то она принимает параметры: x — количество камней в куче, p-позиция игры.

Дальше описываем победу. Если x>=29 и позиция равна 3 (1 Ход Вани), то возвращаем True, что означает победу.

Если, позиция уже равна 3, но камней меньше, чем должно быть для победы, то возвращаем False (проигрыш).

Третье условие. Если кто-то выиграл, но на первых двух условиях мы не вышли из функции, то, значит, выиграл не тот, кто нам нужен, следовательно, возвращаем Fasle.

Если мы не вышли на первых трёх условиях, то, значит, продолжаем прокручивать ходы, рекурсивно запускаем функцию F.

Для нечётных p (это ходы Вани), возвращаем разные ходы через and, т.к. он должен побеждать в любом случае. При этом увеличиваем на 1 значение p.

Для чётных p (это ходы Пети), возвращаем ходы через or.

В конце перебираем все возможные значения для s через цикл for, ищём те значения, которые подходят по условию задачи.

Ответ: 14

Задание 20 (Демо 2022)

Для игры, описанной в задании 19, найдите два таких значения S, при
которых у Пети есть выигрышная стратегия, причём одновременно
выполняются два условия:

− Петя не может выиграть за один ход;

− Петя может выиграть своим вторым ходом независимо от того, как
будет ходить Ваня.

Найденные значения запишите в ответе в порядке возрастания.

Решение:

Задача точно такая же, как и в 19 задании, только теперь обязательно должен побежать Петя на своём втором ходу (p=4), при любой игре Вани.

Пишем тот же шаблон, немного отредактировав его.

def F(x, p):
    if x>=29 and p==4: return True
    if x<29 and p==4: return False
    if x>=29: return False

    if p%2==0:
        return F(x+1, p+1) and F(x*2, p+1)
    else:
         return F(x+1, p+1) or F(x*2, p+1)

for s in range(1, 29):
    if F(s, 1):
        print(s)

Получается 7 и 13.

Ответ:

Задание 21 (Демо 2022)

Для игры, описанной в задании 19, найдите значение S, при котором
одновременно выполняются два условия:

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

− у Вани нет стратегии, которая позволит ему гарантированно выиграть
первым ходом.

Если найдено несколько значений S, в ответе запишите минимальное из них.

Решение:

Опять используем прошлый шаблон, но немного модернизируем.

def F(x, p):
    if x>=29 and (p==3 or p==5): return True
    if x<29 and p==5: return False
    if x>=29: return False

    if p%2==1:
        return F(x+1, p+1) and F(x*2, p+1)
    else:
         return F(x+1, p+1) or F(x*2, p+1)


def F1(x, p):
    if x>=29 and p==3: return True
    if x<29 and p==3: return False
    if x>=29: return False

    if p%2==1:
        return F1(x+1, p+1) and F1(x*2, p+1)
    else:
         return F1(x+1, p+1) or F1(x*2, p+1)

for s in range(1, 29):
    if F(s, 1):
        print(s)

print()

for s in range(1, 29):
    if F1(s, 1):
        print(s)

Здесь Ваня должен выигрывать либо на первом своём ходе (p=3), либо на втором своём ходе (p=5).

Т.к. Ваня не должен гарантированно выиграть своим первым ходом, то мы создаём ещё одну функцию F1, похожую на основную функцию F, которая вычисляет, когда Ваня именно гарантированно выигрывает на своём первом ходе (p=3). И, затем, мы из тех чисел, которые получились в первой функции F, исключаем числа, которые получились во второй функции F1.

В первой функции получилось 12,14, а во второй 14. Получается ответ 12.

Ответ: 12

На сегодня всё. Мы рассмотрели самые распространённые вариации задач из 19-21 задания и подобрали к ним «противоядие». До новых встреч!

В первой 21 задаче в функции F1 только камни x сраниваются с 77. Там надо x + y как в основной функции?

Да, Вы правы, нужно x+y писать. Исправил, спасибо!

Почему начальная позиция p=1? Нельзя ли её сделать р=0?
Дабы избежать у учеников путаницы в голове по нумерации ходов. Или в этом скрывается ошибка?
Извините хотел оперативный ответ от Мастера, т.к. нет времени на эксперименты.

На мой взгляд, можно, поменяв соответствующие параметры тоже. Но не будет ли путаницы, если ваши ученики будут находить решения в интернете, где начинается p c 1.

В первом 19ом задании в функции def мне кажется, что не хватает строки if x + y >= 77: return False
Спасибо за Ваш труд!

Нет, там всё в порядке. В формулировке, когда «после неудачного первого хода Пети», можно писать два условия.

я не понимаю почему вы в первых задачах пишите в конце программы строку » if F1(s, 7, 1):»

Проверяем подходит ли значение s под условие задачи. Семёрка — это количество каменей в первой куче.

Спасибо, за последовательность объяснения. все очень понятно.

почему то в 20 задании находит только одно значение, уже несколько вариантов КИМа так, код написан правильно. В чём причина может быть?

Пришлите ссылку на задание.

Задание 21 из КИМа ЕГЭ 2023 по информатике 17 вариант(к примеру). Можно положить 1 камень или умножить количество на 2, Если больше или равно 144 в сумме двух куч, то победа.В первой куче 3 камня, во второй 1

от 1 до 140(включительно). Условия те же. Также неверные ответы получаются в 19 и 20 заданиях. Код правильный

КИМ это оффициальный сборник вариантов в виде книжки. Могу условия на почту скинуть(хотя вроде расписал всё), тут ограничение символов

Понятно, тогда посмотрю и напишу здесь, что думаю.

Решил 17 вариант (задания 19-21) из сборника 2023 года Крылова, Чуркиной по схеме из этой статьи. Ответы сошлись. Могу вам прислать решения, если вы напишите в группе в вк.

Андрей Рогов


17.07.2021    

2 комментария    

Related Articles

Поиск по сайту

Версия для слабовидящих

Записи

  •  2022 (10)
    •  Май (1)
      • Обновление SSL сертификата вручную с помощью certbot
    •  Март (3)
      • Анализ результатов и разбор пробника от 01.02.2022
      • Как установить Python на Windows
      • Базовый ЕГЭ по информатике. Задание 4
    •  Февраль (5)
      • ОГЭ по информатике. Задание 14
      • Разбор задачи 4909 (Задание 18) с сайта К.Ю. Полякова
      • Разбор задачи 4905 (Задание 18) с сайта К.Ю. Полякова
      • Базовый ЕГЭ по информатике. Задание 11. Кодирование информации
      • Базовый ЕГЭ по информатике. Задание 10. Поиск в текстовом процессоре
    •  Январь (1)
      • ОГЭ по информатике. Задание 13.2
  •  2021 (37)
    •  Декабрь (11)
      • Анализ результатов и разбор заданий пробного ЕГЭ от 15.12.2021 от /dev/inf
      • Задание 26 из работы Статград от 17.12.2021. Формат «Дорешай»
      • Базовый ЕГЭ по информатике. Задание 2. Таблицы истинности
      • ОГЭ по информатике 2022. Задание 13.1
      • ОГЭ по информатике 2022. Задание 12
      • Разбор Статград 27.10.2021. Вариант 1. Подробное решение заданий 24-27
      • Разбор Статград 27.10.2021. Вариант 1. Подробное решение заданий 1-23
      • Базовый ЕГЭ по информатике. Задание 13. Пути в графе
      • Базовый ЕГЭ по информатике. Что это за курс
      • Разбор задачи 4406 с сайта К.Ю. Полякова
      • ОГЭ по информатике. Задание 11
    •  Октябрь (2)
      • Способы решения заданий ЕГЭ. Таблица с рекомендациями
      • Модуль CSV языка Python в решении задания 3 ЕГЭ по информатике
    •  Сентябрь (1)
      • Разбор заданий демоверсии ЕГЭ по информатике 2022
    •  Июль (7)
      • ЕГЭ по информатике 2021. Задание 27. Метод минимальной разности
      • ЕГЭ по информатике 2021. Задание 27. Метод частичных сумм
      • ЕГЭ по информатике 2021. Задание 27. Метод полных сумм
      • ЕГЭ по информатике 2021. Возможна ли автопроверка заданий на программирование на экзамене?
      • ЕГЭ по информатике 2021. Задания 19-21. Решение программированием на Python
      • ЕГЭ по информатике 2021. Задание 15. Решение программированием на Python
      • ЕГЭ по информатике 2021. Задание 8. Решение программированием на Python с помощью модуля itertools
    •  Июнь (1)
      • Решение задания 23 в электронных таблицах с помощью функции ИНДЕКС
    •  Май (5)
      • ЕГЭ по информатике 2021. Решение 23 задания в электронных таблицах в одну формулу
      • Разбор контрольной работы (ОГЭ) от 18.05.2021 по информатике
      • Контрольная работа (ОГЭ) 2021 по информатике. Экспресс-подготовка. Решаем вариант
      • Задание 25. Обработка целых чисел. Делимость
      • Coderunner (moodle plugin) и PascalABC в multilanguage question (Часть 2)
    •  Апрель (1)
      • ЕГЭ по информатике 2021. Задание 2. Таблицы истинности. Решение программированием на Python
    •  Март (6)
      • Задание 23 ЕГЭ по информатике. Решение программированием
      • Задание 23 ЕГЭ по информатике. Решение в электронных таблицах
      • Задание 23 ЕГЭ по информатике. Решение деревом
      • Режимы работы интерпретатора Python
      • Электронные таблицы и системы счисления (функция ОСНОВАНИЕ)
      • Модуль itertools для решения задания 8 ЕГЭ по информатике
    •  Февраль (3)
      • Кумир и новые версии ubuntu
      • Выбираем онлайн whiteboard
      • Установка компилятора python 3 на компьютер
  •  2020 (50)
    •  Декабрь (9)
      • ОГЭ по информатике 2021 Задание 10
      • ОГЭ по информатике 2021 Задание 9
      • ОГЭ по информатике 2021 Задание 8
      • ОГЭ по информатике 2021 Задание 7
      • ОГЭ по информатике 2021 Задание 6
      • ОГЭ по информатике 2021 Задание 5
      • ОГЭ по информатике 2021 Задание 4
      • ОГЭ по информатике 2021 Задание 3
      • ОГЭ по информатике 2021 Задание 2
    •  Октябрь (4)
      • ОГЭ по информатике 2021 Задание 1
      • КЕГЭ 2021. Графы. Задания 1 и 13
      • ОГЭ 2021. Как проходит. Разбор Демо 2021
      • Обзор изменений в процедуре сдачи ЕГЭ по информатике (КЕГЭ)
    •  Август (2)
      • Компьютеры на КЕГЭ. Откуда?
      • КЕГЭ 2021. Сравнение заданий с 2020
    •  Июнь (18)
      • Python 3. Списки 3. Сравнение списков и строк. Ссылочная адресация
      • Python 3. Списки 2. Поиск количества, суммы, произведения, минимума и максимума элементов
      • Python 3. Списки 1. Способы создания
      • Pascal. Массивы. Алгоритмы работы с массивами
      • Pascal. Массивы. Заполнение массива. Вывод массива
      • Информатика. Примеры решения задания ЕГЭ 25 на Python
      • Физика. Соединения конденсаторов
      • Физика. Электроемкость конденсатора
      • Физика. Электроемкость уединенного проводника
      • Физика. Потенциал и напряженность системы из шара и сферы (двух сфер)
      • Физика. Связь напряженности и потенциала
      • Физика. Электрические заряды, помещенные в диэлектрик
      • Физика. Проводники в электростатическом поле
      • Физика. Диэлектрики в электростатическом поле
      • Физика. Электрическое поле в веществе
      • Физика. Потенциал электростатического поля
      • Физика. Работа сил электростатического поля
      • Физика. Напряженность электростатического поля
    •  Май (2)
      • TRIK Studio. Задание на измерение глубины речного дна
      • TRIK Studio. Исполнитель Робот
    •  Апрель (2)
      • Чтение аргументов командной строки в coderunner (moodle plugin) для Python 3
      • Coderunner (moodle plugin) и PascalABC в multilanguage question
    •  Март (2)
      • Демоверсия ОГЭ 2020 по информатике. Задание 12
      • Демоверсия ОГЭ 2020 по информатике. Задание 11
    •  Январь (11)
      • Демоверсия ОГЭ 2020 по информатике. Задание 10
      • Демоверсия ОГЭ 2020 по информатике. Задание 9
      • Демоверсия ОГЭ 2020 по информатике. Задание 8
      • Демоверсия ОГЭ 2020 по информатике. Задание 7
      • Демоверсия ОГЭ 2020 по информатике. Задание 6
      • Демоверсия ОГЭ 2020 по информатике. Задание 5
      • Демоверсия ОГЭ 2020 по информатике. Задание 4
      • Демоверсия ОГЭ 2020 по информатике. Задание 3
      • Демоверсия ОГЭ 2020 по информатике. Задание 2
      • Демоверсия ОГЭ 2020 по информатике. Задание 1
      • Сравнение старой и новой моделей ОГЭ по информатике
  •  2019 (24)
    •  Август (5)
      • Решение варианта повышенного уровня ОГЭ. 5 задание
      • Решение варианта повышенного уровня ОГЭ. 4 задание
      • Решение варианта повышенного уровня ОГЭ. 3 задание
      • Решение варианта повышенного уровня ОГЭ. 2 задание
      • Решение варианта повышенного уровня ОГЭ. 1 задание
    •  Июнь (11)
      • Решение варианта базового уровня ОГЭ. Все задания
      • Решение варианта базового уровня ОГЭ. Задание 18
      • Решение варианта базового уровня ОГЭ. Задание 17
      • Решение варианта базового уровня ОГЭ. Задание 16
      • Решение варианта базового уровня ОГЭ. Задание 15
      • Решение варианта базового уровня ОГЭ. Задание 14
      • Решение варианта базового уровня ОГЭ. Задание 13
      • Решение варианта базового уровня ОГЭ. Задание 12
      • Решение варианта базового уровня ОГЭ. Задание 11
      • Решение варианта базового уровня ОГЭ. Задание 10
      • Решение варианта базового уровня ОГЭ. Задание 9
    •  Март (3)
      • Решение варианта базового уровня ОГЭ. Задание 8
      • Решение варианта базового уровня ОГЭ. Задание 7
      • Решение варианта базового уровня ОГЭ. Задание 6
    •  Февраль (5)
      • Решение варианта базового уровня ОГЭ. Задание 5
      • Решение варианта базового уровня ОГЭ. Задание 4
      • Решение варианта базового уровня ОГЭ. Задание 3
      • Решение варианта базового уровня ОГЭ. Задание 2
      • Решение варианта базового уровня ОГЭ. Задание 1
  •  2018 (10)
    •  Ноябрь (1)
      • Базовый вариант ОГЭ 2018
    •  Октябрь (1)
      • moodle 2.8 и reCAPTCHA v2
    •  Сентябрь (4)
      • Готовимся к ЕГЭ по информатике. Системы счисления. Решение задания №16. Часть 3
      • Готовимся к ЕГЭ по информатике. Системы счисления. Решение задания №16. Часть 2
      • Готовимся к ЕГЭ по информатике. Системы счисления. Решение задания №16. Часть 1
      • Готовимся к ЕГЭ по информатике. Системы счисления. Решение задания №1
    •  Август (1)
      • Видео. Ответы на вопросы по 9 заданию ОГЭ по информатике.
    •  Июль (1)
      • Видео. Ответы на вопросы по 3 заданию ОГЭ по информатике.
    •  Май (1)
      • Готовимся к ЕГЭ по информатике. Системы счисления [5/5]. Некоторые свойства чисел
    •  Апрель (1)
      • Готовимся к ЕГЭ по информатике. Системы счисления [4/5]. Перевод между 2, 8, 16
  •  2017 (14)
    •  Декабрь (1)
      • Готовимся к ЕГЭ по информатике. Системы счисления [3/5]. Перевод между недесятичными СС
    •  Ноябрь (1)
      • Список практических работ по графическому редактору GIMP
    •  Август (2)
      • Готовимся к ЕГЭ по информатике. Системы счисления [2/5]. Перевод в десятичную систему счисления
      • Готовимся к ЕГЭ по информатике. Системы счисления [1/5]. Перевод из десятичной системы счисления
    •  Июнь (2)
      • EV3 + Python = ev3dev. Часть 1.1 Где еще писать код.
      • EV3 + Python = ev3dev. Часть 1. Где писать код.
    •  Май (5)
      • Подготовка к средней основной категории WRO 2017
      • ОГЭ по информатике. Ответы на вопросы. Кузнечик и IP адрес.
      • ОГЭ по информатике. Как оценивается 20 задание
      • ОГЭ по информатике. Как оценивается 19 задание
      • Scratch + WeDo 1. Что нужно, чтобы заработало.
    •  Апрель (1)
      • ОГЭ информатика. Решение задания 2 с помощью таблиц истинности
    •  Март (1)
      • Подготовка к соревнованиям Робофест «Hello Robot Сортировщик 2017»
    •  Февраль (1)
      • Доска Smart Board SB480 в Debian 7
  •  2016 (26)
    •  Декабрь (1)
      • Готовимся к ЕГЭ. 1.1. Системы счисления. Теория.
    •  Ноябрь (1)
      • Открытие групп в социальных сетях для подготовки к ГИА по информатике
    •  Октябрь (1)
      • Почта Яндекс в белом списке squid
    •  Сентябрь (1)
      • PencilCode для старшеклассников — 1
    •  Июль (1)
      • Новый проект andrewson.ru
    •  Июнь (1)
      • WRO 2016 Всероссийский этап
    •  Апрель (2)
      • Scratch. Работа №1. Перемещения персонажа и перо
      • Городской фестиваль технического творчества учащихся 2016
    •  Март (3)
      • Подготовка к ОГЭ по информатике. Задание 20.2.
      • Подготовка к ОГЭ по информатике. Задание 20.1.
      • Итоги Робофест-Южный Урал
    •  Февраль (5)
      • Подготовка к ОГЭ по информатике. Задание 19.
      • Подготовка к ОГЭ по информатике. Особенности второй части экзамена
      • Анализ входящих ссылок
      • Подготовка к ОГЭ по информатике. 18 задание.
      • Подготовка к ОГЭ по информатике. 17 задание.
    •  Январь (10)
      • Подготовка к ОГЭ по информатике. 16 задание.
      • Подготовка к ОГЭ по информатике. 15 задание.
      • Подготовка к ОГЭ по информатике. 14 задание.
      • Подготовка к ОГЭ по информатике. 13 задание.
      • Подготовка к ОГЭ по информатике. 12 задание.
      • Подготовка к ОГЭ по информатике. 11 задание.
      • Подготовка к ОГЭ по информатике. 10 задание.
      • Подготовка к ОГЭ по информатике. 9 задание.
      • Подготовка к ОГЭ по информатике. 8 задание.
      • Подготовка к ОГЭ по информатике. 7 задание.
  •  2015 (20)
    •  Декабрь (7)
      • Итоги 2015 года
      • Подготовка к ОГЭ по информатике. 6 задание.
      • Подготовка к ОГЭ по информатике. 5 задание.
      • Подготовка к ОГЭ по информатике. 4 задание.
      • Подготовка к ОГЭ по информатике. 3 задание.
      • Подготовка к ОГЭ по информатике. 2 задание.
      • Подготовка к ОГЭ по информатике. 1 задание.
    •  Ноябрь (1)
      • Подготовка к ОГЭ по информатике. 0 урок. Нормативные документы, структура экзамена.
    •  Август (2)
      • Контроль ученических компьютеров с помощью Epoptes
      • Городской конкурс анимированных историй, разработанных в среде Scratch по теме «Литературная страна» — 2015
    •  Июнь (1)
      • WRO 2015. Дорога до Казани.
    •  Май (3)
      • П-регулятор в LEGO® MINDSTORMS® EV3
      • Рейтинг сайтов учителей «Зима 2015»
      • Конкурс «Учитель года — 2015». Областной этап.
    •  Март (2)
      • «Стандартные» алгоритмы языка Паскаль
      • Конкурс «Учитель года — 2015» Муниципальный этап.
    •  Январь (4)
      • Реализация аспектов образовательного проекта «ТЕМП» средствами практико-ориентированного подхода к изучению информатики
      • Робофест-Южный Урал 2015
      • Итоги муниципального этапа «Робофест — Урал 2015» г.Челябинск
      • Участие в соревнованиях «Гонки роботов»
  •  2014 (33)
    •  Декабрь (2)
      • Школьные соревнования «Биатлон Мини» 20 декабря 2014
      • Открытый урок «Цикл с условием»
    •  Ноябрь (2)
      • Конкурс «Новые проекты из старых журналов»
      • Семинары по программе «Робототехника» — ресурсные центры НКО
    •  Октябрь (2)
      • Стопоходящая машина Чебышева. Способ реализации.
      • WeDo — нет заданий в «Первые шаги» и «ActivityTab»
    •  Август (2)
      • Общероссийский рейтинг школьных сайтов. История участия по настоящее время.
      • Конспект занятия «Плавное движение по черной линии»
    •  Июль (3)
      • Соревнования «Кегельринг»
      • Участие в конкурсе анимированных историй в Scratch
      • Автоматическая парковка с конструктором лего
    •  Июнь (1)
      • Ремонт экрана NXT своими руками
    •  Май (4)
      • Занимательное программирование на Паскале 3. Математические «фокусы».
      • Занимательное программирование на Паскале 2. Игра “Однорукий бандит”.
      • Занимательное программирование на Паскале 1. Игра «Угадай число».
      • Использование сервиса «Яндекс.Фотки» для размещения изображений на сайте
    •  Апрель (3)
      • Scratch 2.0 в Linux
      • Приложения для мобильных устройств, полезные для информатики и ЕГЭ
      • Участие в соревнованиях «Захват флага», или история одной судейской ошибки
    •  Март (3)
      • Готовимся к WRO 2014. Спутник. Распознаем цвет спутника
      • Программа для соревнования «Биатлон» в NXT-G
      • Проведение пробного ЕГЭ по информатике
    •  Февраль (2)
      • Электронная запись в первый класс с помощью Google Docs
      • Монитор + проектор на Ubuntu 10.04
    •  Январь (9)
      • Алгоритм плавного движения по черной линии 3. Программирование в NXT-G
      • Алгоритм плавного движения по черной линии 2. Математика
      • Алгоритм плавного движения по черной линии 1. Конструирование
      • Окружные отборочные соревнования Робофест-Урал 2014
      • Создание космоса
      • Круглая кнопка в стиле web 2.0.
      • Новогодние обои
      • Светящийся текст 2
      • Светящийся текст
  •  2013 (64)
    •  Декабрь (13)
      • Исследовательская деятельность в сфере информационных технологий (из опыта работы).
      • Среднее значение показаний датчика в NXT-G
      • Общее понятие о слоях. Панель слоев. Создание слоя. — Практическая часть — Упражнение 3
      • Общее понятие о слоях. Панель слоев. Создание слоя. — Практическая часть — Упражнение 4
      • Общее понятие о слоях. Панель слоев. Создание слоя. — Практическая часть — Упражнение 2
      • Общее понятие о слоях. Панель слоев. Создание слоя — Теоретическая часть
      • Общее понятие о слоях. Панель слоев. Создание слоя. — Практическая часть — Упражнение 1
      • Работа с выделенными областями — Практическая часть — Упражнение 2
      • Работа с выделенными областями — Практическая часть — Упражнение 3
      • Работа с выделенными областями — Практическая часть — Упражнение 1
      • Работа с выделенными областями — Теоретическая часть
      • Знакомство с Gimp — Практическая часть — Упражнение 2
      • Знакомство с Gimp — Практическая часть — Упражнение 1
    •  Ноябрь (7)
      • Итоги Робофест-Урал 2013 (квалификация от 28 ноября)
      • Шаг в будущее. Развивающая программа «Черный ящик»
      • Шаг в будущее. Моделирование опыта по изучению силы упругости.
      • Что такое программа «Шаг в будущее»?
      • Итоги «Всероссийского конкурсе образовательных сайтов «Педагогический рейтинг рунета»
      • Электронный документооборот в школе: теория и реальность
      • Семинары First Lego Ligue в Новосибирске и Томске
    •  Октябрь (3)
      • Пароль на запуск программы в Linux
      • Виртуальная машина на Ubuntu Server 12.04 с веб-сайтом
      • Кроссплатформенный аудиоплеер
    •  Сентябрь (6)
      • Школьный сервер. Часть 7. Раздача интернета и DHCP сервер.
      • Школьный сервер. Часть 8. SSH сервер.
      • Планирование кружка «Легоконструирование» на 4 года (2 занятия в неделю)
      • Школьный сервер. Часть 6. Webmin.
      • Школьный сервер. Часть 5. Графический интерфейс.
      • Общероссийский рейтинг образовательных сайтов за лето 2013 года.
    •  Август (6)
      • Подбор страниц, связанных с интерактивной доской
      • Репост. Интересная статья «Дети не умеют пользоваться компьютерами… И вот почему это должно вас беспокоить»
      • Школьный сервер. Часть 4. Установка серверной ОС.
      • Школьный сервер. Часть 3. Исходные данные.
      • Школьный сервер. Часть 2. Выбор дистрибутива и ПО
      • Школьный сервер. Часть 1. Задачи школьного сервера.
    •  Июль (2)
      • Летний лагерь. Соревнования.
      • Летний лагерь. Подготовка к соревнованиям.
    •  Июнь (8)
      • Летний лагерь. День шестой.
      • Летний лагерь. День пятый.
      • Летний лагерь. День четвертый.
      • Плагины моего сайта
      • И снова новый хостинг
      • Летний лагерь. День третий
      • Летний лагерь. День второй.
      • Летний лагерь. День первый.
    •  Май (4)
      • Настройка веб-сервера на основе Linux Mint
      • Задачи на логику
      • Дистанционное управление NXT через Bluetooth
      • Установка Lego Mindstorm NXT на Windows Starter (обновление)
    •  Апрель (8)
      • Подборка видео про Сумо лего-роботов
      • Биатлон Лего-роботов
      • Кегельринг. Анализ задания. Практические наброски.
      • Разбор C4 25 апреля
      • Создание страницы (записи) в wordpress с подключением jQuery
      • Участие в XVII Олимпиаде технического творчества учащихся (робототехническое направление)
      • Подготовка к V городскому фестивалю технического творчества
      • Муниципальный этап WRO 2013 г.Челябинск
    •  Март (5)
      • Городской этап WRO Челябинск
      • Робот для WRO Баробудур
      • Сайты, связанные с Лего
      • Виджеты со 101widgets.com
      • Новый хостинг
    •  Февраль (2)
      • First Lego Ligue
      • Hello Robot
  •  2012 (38)
    •  Декабрь (2)
      • Transport Tycoon Deluxe на Linux, или Open TTD
      • Уменьшаем шок от перехода на Linux
    •  Ноябрь (2)
      • Планирование кружка Лего (210 часов)
      • Установка Lego Mindstorm NXT 2.0 на Windows 7 Starter
    •  Октябрь (1)
      • Различные программы для использования в образовании
    •  Сентябрь (10)
      • Практические работы по моделированию
      • «Соло на клавиатуре» for Linux (перепост)
      • Информация и информационные процессы
      • Общие сведения об установке
      • Разбиение дисков при установке
      • Запрет на создание файлов и папок на рабочем столе
      • Снятие скриншотов в Росинке
      • Настройка беспроводной сети в Linux «Росинка»
      • Внешний вид десктопа
      • Выбор ОС для ОУ
    •  Июнь (1)
      • Сатира
    •  Май (3)
      • Лабораторная работа «Создание презентации с использованием гиперссылок в LibreOffice.org Impress»
      • Какие плагины wordpress я использую
      • Почему WordPress?
    •  Апрель (11)
      • Статья «Организация исследовательской деятельности учащихся на элективных занятиях по физике в старшей профильной школе»
      • Презентация «Ребусы»
      • Конспект урока на тему «Анализ статистической обработки данных»
      • Программа элективного курса «Компьютерная графика»
      • Облачное хранение файлов на Яндекс.Диск
      • Moodle в школе
      • Домашнее задание по алгебре логики
      • По следам контрольных работ
      • Записки пользователя Linux
      • Проектная работа «Свой сайт»
      • HTML-редактор под Linux
    •  Март (1)
      • Размышления о СПО
    •  Февраль (1)
      • Материалы по HTML
    •  Январь (6)
      • Фантастическое произведение «Школа будущего»
      • Какой я вижу школу будущего
      • Завершился районный конкурс «Учитель года-2012»
      • Файлы и файловая система
      • История языка гипертекстовой разметки HTML
      • Презентация по теме «Алгоритмизация и программирование»
  •  2011 (8)
    •  Декабрь (6)
      • Собственный опыт использования ОС Linux
      • Самостоятельная работа по теме «Перевод чисел из одной системы счисления в другую»
      • Программа кружка «Мастерская лего»
      • Шаги перехода на ПСПО
      • Информационные процессы
      • Моя педагогическая философия
    •  Ноябрь (1)
      • Виртаульная лабораторная работа «Определение плотности газа»
    •  Сентябрь (1)
      • Виртуальная лабораторная работа «Определение силы упругости»

Последние записи

  • Обновление SSL сертификата вручную с помощью certbot
    04.05.2022
  • Анализ результатов и разбор пробника от 01.02.2022
    31.03.2022
  • Как установить Python на Windows
    31.03.2022
  • Базовый ЕГЭ по информатике. Задание 4
    31.03.2022
  • ОГЭ по информатике. Задание 14
    23.02.2022

Метки

Cover image for Теория игр в 19-21 задачах КЕГЭ 2021

Введение

Привет друг! Проблемы с теорией игр? В этой статье мы разберем код, который решает любые прототипы стандартных 19-21 задач из КЕГЭ. Чтобы максимально понять ниже описанный код, я крайне рекомендую сначала научиться решать эти задачи ручками.

Условие

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

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

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

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

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

Решение

Winpos

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

Обозначим переменные count1 и count2 как количество камней в 1 и 2 куче соответственно.
Если изначально суммарное количество камней в кучах меньше 61

if (count1 + count2 < 61)

Enter fullscreen mode

Exit fullscreen mode

и при любом следующем ходе оно становиться больше либо равно 61

((count1 + count2 + 1 >= 61) or
(count1 * 4 + count2 >= 61) or 
(count1 + count2 * 4 >= 61))

Enter fullscreen mode

Exit fullscreen mode

то мы возвращаем True, что означает что игрок находиться в выигрышной позиции.
Иначе мы возвращаем False, что означает что игрок не находиться в выигрышной позиции.

def winpos(count1, count2):
    if (count1 + count2 < 61) and ((count1 + count2 + 1 >= 61) or
       (count1 * 4 + count2 >= 61) or (count1 + count2 * 4 >= 61)):
        return True
    else:
        return False

Enter fullscreen mode

Exit fullscreen mode

Первая функция готова, приступим к написанию следующей.

Losspos

Теперь нам надо написать функцию, которая будет возвращать True если игрок находится в проигрышной позиции и False если игрок не находится в проигрышной позиции.

Если изначально игрок не находиться в выигрышной позиции

if not winpos(count1, count2)

Enter fullscreen mode

Exit fullscreen mode

и каждый следующий ход противника является выигрышным

(winpos(count1 + 1, count2) and winpos(count1, count2 + 1) and
 winpos(count1 * 4, count2) and winpos(count1, count2 * 4))

Enter fullscreen mode

Exit fullscreen mode

то мы возвращаем True, что означает что игрок находиться в проигрышной позиции.
Иначе, мы возвращаем False, что означает что игрок не находиться в проигрышной позиции.

def losspos(count1, count2):
    if not winpos(count1, count2) and (winpos(count1 + 1, count2) and
        winpos(count1, count2 + 1) and winpos(count1 * 4, count2) and
        winpos(count1, count2 * 4)):
        return True
    else:
        return False

Enter fullscreen mode

Exit fullscreen mode

Вторая функция готова, осталась еще одна.

Prewinpos

Последняя функция должна возвращать True если игрок находится в предвыигрышной позиции и False если игрок не находится в предвыигрышной позиции.

Если изначально игрок не находится в выигрышной позиции

if not winpos(count1, count2)

Enter fullscreen mode

Exit fullscreen mode

и любой следующий ход противника является проигрышным

(losspos(count1 + 1, count2) or losspos(count1, count2 + 1) or
 losspos(count1 * 4, count2) or losspos(count1, count2 * 4)):

Enter fullscreen mode

Exit fullscreen mode

то мы возвращаем True, что означает что игрок находится в предвыигрышной позциии.
Иначе, мы возвращаем False, что означает что игрок не находиться в предвыигрышной позциии.

def prewinpos(count1, count2):
    if not winpos(count1, count2) and (losspos(count1 + 1, count2) or
        losspos(count1, count2 + 1) or losspos(count1 * 4, count2) or
        losspos(count1, count2 * 4)):
        return True
    else:
        return False

Enter fullscreen mode

Exit fullscreen mode

Основа готова, осталось просто перебрать значения, чем мы сейчас и займемся.

1 Задача

Условие задачи можно воспринимать так: «Ваня находиться в выигрышной позиции(выигрывает за один ход)».

Изначально в первой куче 3 камня

count1 = 3

Enter fullscreen mode

Exit fullscreen mode

а во второй куче S камней, 1 ≤ S ≤ 57

for s in range(1, 58):

Enter fullscreen mode

Exit fullscreen mode

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

if winpos(count1 + 1, s) or winpos(count1, s + 1) or
   winpos(count1 * 4, s) or winpos(count1, s * 4):

Enter fullscreen mode

Exit fullscreen mode

и если хоть одна такая комбинация существует, то мы выводим S на экран и прерываем цикл.

print("19:", s)
break

Enter fullscreen mode

Exit fullscreen mode

Получается следующий код, который решает эту задачу

count1 = 3
for i in range(1, 58):
    if winpos(count1 + 1, i) or winpos(count1, i + 1) or
        winpos(count1 * 4, i) or winpos(count1, i * 4):
        print("19:", i)
        break

Enter fullscreen mode

Exit fullscreen mode

2 Задача

Условие задачи можно воспринимать так: «Ваня находится в проигрышной позиции».

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

for i in range(1, 58):
    if losspos(count1 + 1, i) or losspos(count1, i + 1) or
        losspos(count1 * 4, i) or losspos(count1, i * 4):
        print("20:", i)

Enter fullscreen mode

Exit fullscreen mode

3 Задача

Условие задачи можно воспринимать так: «Ваня находиться или в выигрышной или в предвыигрышной позиции»

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

if (winpos(count1 + 1, i) or predwinpos(count1 + 1, i)) and 
   (winpos(count1, i + 1) or predwinpos(count1, i + 1)) and 
   (winpos(count1 * 4, i) or predwinpos(count1 * 4, i)) and 
   (winpos(count1, i * 4) or predwinpos(count1, i * 4)):
   print("21:", i)

Enter fullscreen mode

Exit fullscreen mode

2 Способ

Подробней с этим методом решения теории игр вы можете ознакомится на канале Алексея Кабанова

Мемоизация

Для оптимизации рекурсии подключим декоратор cache из модуля functools.

from functools import cache

Enter fullscreen mode

Exit fullscreen mode

Moves

Напишем функцию moves, которая принимает количество камней в обеих кучах и возвращает всевозможные варианты ходов.

def moves(heap):
    a, b = heap
    return (a + 1, b), (a * 4, b), (a, b + 1), (a, b * 4)

Enter fullscreen mode

Exit fullscreen mode

Game

Напишем функцию game, которая рекурсивно описывает игру.

@cache
def game(heap):
    if sum(heap) >= 61:
        return 0
    steps = [game(x) for x in moves(heap)]
    if any(x % 2 == 0 for x in steps):
        return min(x for x in steps if x % 2 == 0) + 1
    else:
        return max(steps) + 1

Enter fullscreen mode

Exit fullscreen mode

1-3 задача

Перебираем все значения s и выводим на экран необходимые данные.

for s in range(57, 0, -1):
    print(s, ": ", game((3, s)), " | ", [game(x) for x in moves((3, s))])

Enter fullscreen mode

Exit fullscreen mode

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

Хотите готовиться со мной к ЕГЭ?
Пишите:
ydkras@mail.ru
Немного обо мне.

В задачах 19-21 ЕГЭ по информатике требуется проанализировать некую простую игру. Однако хотя игра и проста, её анализ может оказаться достаточно хитрым делом. Поэтому приходит мысль: а нельзя ли, чтобы этот анализ выполнил компьютер? (Спойлер: Можно!)

Немного теории.

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

Таким образом, если в текущей позиции у игрока есть хотя бы один ход, ведущий к выигрышу, то это — выигрышная позиция для данного игрока. 

Если же в ответ на любой ход текущего игрока его противник выигрывает, то для текущего игрока такая ситуация — проигрышная.

Теперь более-менее понятно, как должна выглядеть программа, анализирующая ход игры. Прежде всего она должна проверить, не выиграл ли уже кто-то из игроков. Если это так — то дальнейший анализ позиции не требуется. 

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

Если же неверно ни первое, ни второе — то ситуация неопределенная.(Вообще-то для игр из задач ЕГЭ всегда можно сказать, кто из игроков выиграет, такая неопределенность возникает только из-за ограничения на число ходов.)

Данную процедуру следует рекурсивно применять к позициям, возникающим по ходу игры.

А теперь — практика.

Решим программно задачи 19-21 из 8 варианта с сайта Полякова. Условие выглядит следующим образом:

(№ 3084) (А. Кабанов) Два игрока, Петя и Ваня, играют в следующую игру.
Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход
делает Петя. За один ход игрок может
  а) добавить в кучу один камень;
  б) увеличить количество камней в куче в два раза;
  в) увеличить количество камней в куче в три раза.
Игра
завершается в тот момент, когда количество камней в куче становится не
менее 43. Если при этом в куче оказалось не более 72 камней, то
победителем считается игрок, сделавший последний ход. В противном случае
победителем становится его противник. В начальный момент в куче было S
камней, 1≤S≤42.
Ответьте на следующие вопросы:
  Вопрос 1. Найдите минимальное значение S, при котором Ваня выигрывает своим первым ходом при любой игре Пети.
  Вопрос 2. Сколько существует значений S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
− Петя не может выиграть за один ход;
− Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
  Вопрос 3. Найдите минимальное и максимальное значения S, при которых одновременно выполняются два условия:
– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Найденные значения запишите в ответе в порядке возрастания.

Приведем текст рекурсивной функции hod на языке Питон, которая по сути и решает данную задачу.

def hod(number,limit,s):
    player = (number+1)%2 + 1  # номер текущего игрока (1 или 2)
    rival = 3 — player    # Номер его противника (2 или 1)
    #Анализ позиции
    if s >= 43 and s <= 72: return rival  # текущий игрок проиграл
    if s > 72 : return player  # проиграл противник

    if number > limit: return 0  # ситуация неопределенная из-за ограничений на количество ходов

        # Делаем ходы и проверяем результаты
    rc1 = hod(number+1,limit,3*s)
    if rc1 == player: return player

        rc2 = hod(number+1,limit,2*s)
    if rc2 == player: return player

    rc3 = hod(number+1,limit,s+1)
    if rc3 == player: return player

        if rc1 == rival and rc2 == rival and rc3 == rival: return rival

        return 0 

Функция имеет три параметра: number (номер хода), limit (ограничение на количество ходов) и s (количество камней в куче). При первом обращении следует задавать значение number,  равное 1 (т.е. ходы мы нумеруем с единицы).

Переменная player принимает значение 1 для нечетных номеров ходов (т.е. ходы 1, 3 и т.д. совершает первый игрок) и значение 2 — для четных номеров. Переменная rival, наоборот, равна 2 для нечетных номеров ходов и 1 — для четных. Таким образом, player — это номер игрока, который делает текущий ход, а rival — номер его противника.

Прежде всего функция проверяет, не завершилась ли игра. Если число камней S не менее 43 и не более 72, то это означает, что текущий игрок проиграл: перед этим его противник сделал победный ход. Функция завершается, вернув значение rival. Если же число камней более 72, то соперник текущего игрока только что сделал проигрышный для себя ход, и выиграл текущий игрок. Программа возвращает значение player. 

Далее проверяется ограничение на число ходов. Если это ограничение превышено (number>limit), то дальнейшие ходы не выполняются и программа возвращает значение 0 (т.е. победитель не определён).

Далее осуществляются рекурсивные вызовы функции  hod с параметром number+1 (т.е. номер хода увеличен на единицу), с тем же самым значением limit и числом камней в куче 3S, 2S и S+1 (согласно условиям задачи).

Рекомендую сначала проверять значения, как можно сильнее отличающиеся от исходного (т.е. 3S и 2S) и потом S+1. Это позволяет уменьшить число вершин «дерева игры», которые анализирует программа. С этой же целью программа, обнаружив выигрышный для текущего игрока ход (т.е. результат вызова функции равен player), немедленно возвращает значение player и не выполняет дальнейших проверок ходов.

Если все три результата ходов равны rival, то в данной позиции все ходы текущего игрока приводят к его проигрышу, и программа возвращает значение rival. 

Если же для текущего игрока нет ни одного выигрышного хода, но у него есть ходы, не приводящие к его проигрышу, то ситуация неопределённая, и программа возвращает 0.

Теперь проведем анализ данной игры и получим ответы на заданные в задаче вопросы.

Первый вопрос: каково минимальное значение S, при котором второй игрок выигрывает своим первым ходом? Для ответа на него достаточно вызвать функцию для всех значений S таких, что 1<=S<=42, с ограничением на количество ходов, равным 2 (т.е. игроки делают по одному ходу). Если функция hod вернет значение, равное 2, то при данном начальном значении S второй игрок выигрывает в любом случае.

Второй вопрос: сколько имеется значений S, при которых первый игрок не может выиграть своим первым ходом, но гарантированно выигрывает вторым?

Для этого надо запустить программу два раза, первый раз с ограничением на число ходов 1, а второй раз — с ограничением 3. Если в первом случае программа вернет значение 0 (нет победителя), а второй — 1, то при данном S первый игрок не может гарантированно выиграть своим первым ходом, но непременно выигрывает вторым. Вместо ограничений 1 и 3 можно взять 2 и 4: дополнительный ход второго игрока (если он возможен) ничего не меняет.

Наконец, последний вопрос: при каких значениях S второй игрок не может гарантированно выиграть первым ходом, но обязательно выиграет вторым? Для этого надо опять запустить функцию дважды, с ограничением на число ходов 2 и 4. Если в первом случае функция вернет 0, а во втором — 2, то это искомое значение.   

Вот программа, которая выполняет данные проверки:

for s in range(1,43):
    h2 = hod(1,2,s)
    h4 = hod(1,4,s)
    rez = »
    if h2 == 2: rez = ‘*** 19 ***’
    if h2 == 0:
        if h4 == 1: rez = ‘*** 20 ***’
        if h4 == 2: rez = ‘*** 21 ***’
    print(s,h2, h4, rez)

Результат выполнения программы следующий (из него исключены строки, которые не дают ответов не поставленные вопросы):

7 0 1 *** 20 ***
12 0 2 *** 21 ***
13 0 1 *** 20 ***
14 2 2 *** 19 ***
39 0 2 *** 21 ***
40 0 1 *** 20 ***
41 2 2 *** 19 ***

Следовательно, ответы на вопросы задачи таковы:

Вопрос 1: такие значения — 14 и 41, минимальное — 14.

Вопрос 2: такие значения — 7, 13 и 40, всего их 3.

Вопрос 3: такие значения — 12 и 39. Минимальное — 12, а максимальное — 39.

А теперь решим задачи 19-21 из демонстрационного варианта ФИПИ 2022 г.

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

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

20. Для игры, описанной в задании 19, найдите два таких значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:
− Петя не может выиграть за один ход;
− Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
Найденные значения запишите в ответе в порядке возрастания.

21. Для игры, описанной в задании 19, найдите значение S, при котором одновременно выполняются два условия:
− у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
− у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Если найдено несколько значений S, в ответе запишите минимальное из них.

Вопросы по сути те же, что и в задаче с сайта Полякова, однако правила игры другие. 

Перепишем функцию hod для данных правил:

def hod(number,limit,s):
    player = (number+1)%2 + 1  # номер текущего игрока (1 или 2)
    rival = 3 — player    # Номер его противника (2 или 1)
    #Анализ позиции
    if s >= 29: return rival  # текущий игрок проиграл

    if number > limit: return 0  # ситуация неопределенная из-за ограничений на количество ходов

        # Делаем ходы и проверяем результаты
    rc1 = hod(number+1,limit,2*s)
    if rc1 == player: return player

        rc2 = hod(number+1,limit,s+1)
    if rc2 == player: return player

    if rc1 == rival and rc2 == rival: return rival

        return 0 

Основная программа выглядит так же, как и в предыдущем случае. Единственное изменение — вместо range(1,43) в ней записано range(1,29).

Результат выполнения программы следующий (в нём опять-таки опущены несущественные строки):

7 0 1 *** 20 ***
12 0 2 *** 21 ***
13 0 1 *** 20 ***
14 2 2 *** 19 ***

Отсюда видно, что ответ на задачу 19 — 14, на задачу 20 —  7 и 13, а на задачу 21 — 12. Это совпадает с приведенными в варианте ответами.

Если Петя глуповат…

При составлении программы мы предполагали, что игроки — умные и ошибочных ходов не делают. Но на сайте «Решу ЕГЭ» очень часто встречаются задачи, где один из игроков дает маху. Вот пример задачи 19 (задача 27416):

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

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

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

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

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

Сначала напишем нашу функцию hod для данной задачи: она всё равно потребуется для задач 20 и 21. Впрочем, отличий от первого варианта не так много. Во-первых, так как у нас теперь две кучи, у функции есть два параметра s1 и s2: число камней в первой и второй кучах. Условие завершения игры теперь выглядит так: s1+s2>=77. Так как теперь у каждого игрока есть четыре возможных хода, то проверяется не три, а четыре альтернативы.

def hod(number,limit,s1,s2):
    player = (number+1)%2 + 1  # номер текущего игрока (1 или 2)
    rival = 3 — player    # Номер его противника (2 или 1)
    #Анализ позиции
    if s1+s2 >= 77: return rival  # текущий игрок проиграл

        if number > limit: return 0  # ситуация неопределенная из-за ограничений на количество ходов

        # Делаем ходы и проверяем результаты
    rc1 = hod(number+1,limit,2*s1,s2)
    if rc1 == player: return player

        rc2 = hod(number+1,limit,s1,2*s2)
    if rc2 == player: return player

    rc3 = hod(number+1,limit,s1+1,s2)
    if rc3 == player: return player

        rc4 = hod(number+1,limit,s1,s2+1)
    if rc4 == player: return player

        if rc1 == rival and rc2 == rival and rc3 == rival and rc4 == rival: return rival

        return 0

Но как быть с тем, что наша функция предполагает безошибочную игру, а условие задачи подразумевает, что первый игрок сделал ошибочный ход? А очень просто: надо вызвать функцию четыре раза с позициями, которые могут получиться после первого хода Пети. В параметрах функции надо указать, что это — второй ход, и задать ограничение на количество ходов, равное двум. Если хотя бы в одном случае функция даст ответ, что выиграл второй игрок, то это и будет ответом на вопрос задачи.

Таким образом, основная программа выглядит так:

s1=7
for s2 in range(1,70):
    if hod(2,2,s1*2,s2)==2 or hod(2,2,s1,s2*2)==2 or hod(2,2,s1+1,s2)==2 or hod(2,2,s1,s2+1)==2:
        print(s2)
        break

Она дает правильный ответ: 18 камней.

Когда основная функция написана, не представляет сложности решить задачи 20 и 21. Вот их вопросы (правила игры, естественно, те же самые):

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

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

Основная программа опять-таки похожа на первый вариант, отличия незначительные:

s1=7
for s2 in range(1,70):
    h2 = hod(1,2,s1,s2)
    h4 = hod(1,4,s1,s2)
    rez = »
    if h2 == 0:
        if h4 == 1: rez = ‘*** 20 ***’
        if h4 == 2: rez = ‘*** 21 ***’
    print(s2,h2, h4, rez)

Результат работы программы (опять-таки опущены несущественные строки):

30 0 2 *** 21 ***
31 0 1 *** 20 ***
33 0 2 *** 21 ***
34 0 1 *** 20 ***

Таким образом, ответ на вопрос задачи 20 — это 31 и 34, а на вопрос задачи 21 — 30 (напомню, что там требуется минимальное значение из двух ответов: 30 и 33).

Итак, мы убедились, что задачи 19-21 ЕГЭ по информатике можно решить программно, и решение — не слишком сложное.

(c) Ю.Д.Красильников, 2021 г.

ЕГЭ информатика 19-21 задание разбор, теория, как решать.

Теория игр, выигрышная стратегия, 19.(Б) — 1 балл, 20.(П) — 1 балл, 21.(В) — 1 балл

Е19-21.31 когда количество камней в куче становится не менее 129

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

Читать далее

Е19-21.31 Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 211.

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

Читать далее

Е19-21.30 когда количество камней в куче становится не менее 29

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

Читать далее

Е19-21.29 когда суммарное количество камней в кучах становится не менее 44

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

Читать далее

Е19-21.28 Игра завершается в тот момент, когда количество камней в куче становится не менее 84.

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

Читать далее

Е19-21.27 добавить в кучу один камень, два камня, увеличить количество камней

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

Читать далее

Е19-21.26 добавить в кучу один камень, два камня, три камня; увеличить количество камней

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

Читать далее

Е19-21.25 добавить в кучу два камня, добавить в кучу три камня или увеличить

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

Читать далее

Е19-21.24 добавить в кучу три камня или увеличить количество камней в куче в два раза

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

Читать далее

Е19-21.23 когда количество камней в куче становится не менее 25

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

Читать далее

На уроке рассмотрен разбор 19, 20, 21 задания ЕГЭ по информатике: дается подробное объяснение и решение задания

Содержание:

  • Объяснение заданий 19, 20 и 21 ЕГЭ по информатике
    • Теория игр. Поиск выигрышной стратегии
  • Решение 19, 20, 21 заданий ЕГЭ по информатике
    • Игра с двумя кучами камней или табличка
  • Задания для тренировки 19, 20, 21 заданий ЕГЭ (взяты из КИМ и сборников прошлых лет)
    • Игра с одной кучей камней
    • Игра с набором слов

Объяснение заданий 19, 20 и 21 ЕГЭ по информатике

19-е задание: «Анализ алгоритма логической игры»

Уровень сложности

— повышенный,

Требуется использование специализированного программного обеспечения

— нет,

Максимальный балл

— 1,

Примерное время выполнения

— 6 минут.

  
Проверяемые элементы содержания: Умение анализировать алгоритм логической игры

20-е задание: «Поиск выигрышной стратегии»

Уровень сложности

— повышенный,

Требуется использование специализированного программного обеспечения

— нет,

Максимальный балл

— 1,

Примерное время выполнения

— 6 минут.

  
Проверяемые элементы содержания: Умение найти выигрышную стратегию игры

21-е задание: «Дерево игры для выигрышной стратегии»

Уровень сложности

— повышенный,

Требуется использование специализированного программного обеспечения

— нет,

Максимальный балл

— 1,

Примерное время выполнения

— 10 минут.

  
Проверяемые элементы содержания: Умение построить дерево игры по заданному алгоритму и найти выигрышную стратегию

До ЕГЭ 2021 года — эти задания были объединены в задание № 26 ЕГЭ

Типичные ошибки и рекомендации по их предотвращению:

«Для пункта 2 или 3 в представленной стратегии рассмотрены не все возможные ходы проигрывающего игрока, которые он может сделать при игре выигрывающего игрока по выигрышной стратегии.
Для пункта 3 представлено дерево игры, содержащее лишние ветви, не относящиеся к выигрышной стратегии.
Дерево, являющееся частью ответа на пункт 3, представлено с использованием ссылок на
фрагменты, являющиеся решениями других пунктов задания.
В задании спрашивается, в частности, кто выиграет, а в ответе не указан в явном виде выигрывающий игрок. На все вопросы, поставленные в задании, должны быть даны чёткие ответы. Ответ на вопрос о выигрышной стратегии в стиле «Может выиграть первый игрок, но если он неправильно пойдёт, то выиграет второй» является ошибочным, поскольку выигрышная стратегия одного игрока не оставляет возможности победы другому игроку»

ФГБНУ «Федеральный институт педагогических измерений»

* Некоторые изображения и примеры страницы взяты из материалов презентации К. Полякова

Теория игр. Поиск выигрышной стратегии

Для решения 19 задания необходимо вспомнить следующие темы и понятия:

    Выигрышная стратегия

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

  • все позиции в простых играх делятся на выигрышные и проигрышные;
  • выигрышная позиция – это такая позиция, в которой игрок, делающий первый ход, обязательно выиграет при любых действиях соперника, если не допустит ошибки; при этом говорят, что у данного игрока есть выигрышная стратегия – алгоритм выбора очередного хода, позволяющий ему выиграть;
  • если игрок, делающий первый ход, находится в проигрышной позиции, то он обязательно проиграет, если ошибку не сделает его оппонент; в этом случае говорят, что у данного игрока нет выигрышной стратегии; таким образом, общая стратегия игры состоит в том, чтобы своим ходом создать проигрышную позицию для оппонента;
  • выигрышные и проигрышные позиции характеризуются так:
  • позиция, из которой все возможные ходы ведут в выигрышные позиции – проигрышная;
  • позиция, из которой хотя бы один из последующих возможных ходов ведет в проигрышную позицию — выигрышная, при этом стратегия игрока состоит в том, чтобы перевести игру в эту проигрышную (для оппонента) позицию.
  • Кто выиграет при стратегически правильной игре?

  • для того чтобы определить, какой из игроков выиграет при стратегически правильной игре, необходимо ответить на вопросы:
  • Может ли какой-либо из игроков выиграть, независимо от ходов других игроков?
  • Что должен сделать игрок с выигрышной стратегией первым ходом, чтобы он смог выиграть, независимо от действий ходов игроков?

Рассмотрим пример:

Игра: в кучке лежит 5 спичек; играют два игрока, которые по очереди убирают спички из кучки; условие: за один ход можно убрать 1 или 2 спички; выигрывает тот, кто оставит в кучке 1 спичку

Решение:

  • Будем использовать метод построения дерева. Первый играющий может убрать одну спичку (в этом случае их останется 4) или сразу 2 (останется 3), эти два варианта отобразим при помощи дерева:
  • пример 19 задания егэ по информатике

  • если первый игрок оставил 4 спички, второй может своим ходом оставить 3 или 2; а если после первого хода осталось 3 спички, второй игрок может выиграть, взяв две спички и оставив одну:
  • дерево ходов

  • если осталось 3 или 2 спички, то 1-ый игрок (в обеих ситуациях) выиграет своим ходом:
  • дерево игры
    проанализируем стратегию игры:

  • если первый игрок своим первым ходом взял две спички, то второй сразу выигрывает; если же он взял одну спичку, то своим вторым ходом он может выиграть, независимо от хода второго игрока;
  • итак, убрав всего одну спичку первым ходом, 1-ый игрок всегда может выиграть на следующем ходу;
  • тогда как второй игрок не может выиграть, независимо от действий первого: потому что, если первый игрок сначала убрал одну спичку, второй всегда проиграет.

Ответ: при правильной игре (стратегии игры) выиграет первый игрок; для этого ему достаточно своим первым ходом убрать одну спичку.

Решение 19, 20, 21 заданий ЕГЭ по информатике

Плейлист видеоразборов задания на YouTube:
Задание демонстрационного варианта 2022 года ФИПИ


Игра с двумя кучами камней или табличка

19_8:

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

Задание 19 ЕГЭ.

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

Задание 20 ЕГЭ.

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

  
Задание 21 ЕГЭ.
Найдите два значения S, при которых одновременно выполняются два условия:
– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Найденные значения запишите в ответе в порядке возрастания.

✍ Решение:

  • Нарисуем таблицу, в первом столбце которой будем откладывать количество камней в первой куче, а в первой строке — количество камней во второй куче. Получим матрицу. Поскольку в первой куче количество начинается с 5, то это и будет первым значением в таблице. Во второй куче начнем с наибольшего возможного числа — 53. Таблица пригодится для решения заданий 20 и 21:
  • 19 егэ с таблицей

  • Для начала найдем все выигрышные позиции для первой строки таблицы, т.е. для первого хода. Обозначим их плюсами (+):
  • 19 задание 2 кучи

    Выигрышные позиции для первой строки ищем по принципу увеличения количества камней S в 2 два раза: 5 + S*2 >=59. Получим S>=27

  • Для того, чтобы получить наименьшее значение S, в качестве первого хода Пети необходимо увеличивать в два раза вторую кучу. Т.е. для решения задания необходимо найти такое наименьшее S, при котором Петя походил неверно, и попал своим ходом в выигрышную позицию для своего соперника, т.е. в ячейку с плюсом:
  • S = 14
    1 ход Петя: 14*2 = (5,28)
    2 ход Ваня: 28*2 = (5,56), Сумма = 61, Выигрыш! 
    

Ответ: 14

✎ Задание 20:

  • Проанализируем таблицу, и для каждой строки найдем выигрышные позиции с одного хода. Т.е. которые позволят игроку, оказавшемуся «на них», выиграть за один ход (получить суммарно 59 и более камней):
  • 20 задание егэ

    При заполнении таблицы выигрышными позициями можно проследить закономерность «узора», а заполнять позиции по аналогии.

  • Найдем проигрышные позиции: те, которые ведут только в выигрышные позиции для соперника (ведут только в плюсы)
  • Проигрышные позиции: (6,26) (8,25) (10,24) (12,23) (14,22)

  • В задании требуется найти минимальное S, котором выиграет Петя, но выиграет он НЕ первым своим ходом, а вторым. То есть в нашем случае необходимо найти S, которое может перевести соперника в проигрышную позицию. То есть в минус. Для первой строки (так как первым будет ходить Петя) таких значений два:
  • Наименьшее S = 24
  • Для решения этого задания найдем выигрышные позиции со второго хода, т.е. которые могут перевести соперника в проигрышную позицию (с минусом):
  • Чтобы выиграл Ваня, но выиграл не первым ходом, а вторым, необходимо, чтобы Петя находился в такой позиции, которая ведет его только на выигрышные позиции со второго хода:

Ответ: 23 25


>19_9:

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

Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из четырёх позиций: (5, 9), (3, 9), (6, 8), (6, 5).

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

Задание 19 ЕГЭ.

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

Задание 20 ЕГЭ.

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

Задание 21 ЕГЭ.

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

✍ Решение (Excel):

✎ Задание 19:

  • В столбце А отложим значения — количество камней в первой куче. Начнем с ячейки А2, в которую внесем начальное количество камней, т.е. 10. Автозаполнением продлим значения вниз до 0:
  • В строке 1 таблицы (начиная с ячейки B1) отложим значения для второй кучи. Поскольку в задании говорится, что победа будет достигнута при S<=20, и достигнуть этого значения более сильной командой можно уменьшив кол-во камней во второй куче в два раза, начиная с числа 40: 40/20. То есть возьмем значение больше 40, примерно 45. Используем автозаполнение до значения 11:
  • Из двух команд, которые могут выполнять игроки, выберем наиболее сильную, т.е. благодаря которой можно быстрее достичь выигрышного диапазона и попасть в значения S<=20. Это команда уменьшения количества камней в два раза, т.е. /2.
  • Для каждой из ячеек полученной таблицы рассчитаем значение, полученное в результате уменьшения в два раза той кучи камней, в которой большее количество камней (так как это даст меньший результат). Например, для ячейки С5, в которой игрок имеет в первой куче 7 камней, а во второй куче 44 камня, мы бы выполнили действие 44/2+7. Т.е. уменьшили вдвое вторую кучу, т.к. в ней больше камней. Еще необходимо обращать внимание на четность и нечетность значений (в Excel это функция ЕНЕЧЁТ — возвращает ИСТИНУ, если значение нечетно).
  • Чтобы автоматизировать процесс необходимо использовать формулу, в которой найдем максимальное значение из двух вариантов:
  • Минимальное из
    (ЕСЛИ(ЕНЕЧЁТ(1-я куча) то (1-я куча+1)/2+2-я куча, 
    иначе 1-я куча/2+2-я куча);
    ЕСЛИ(ЕНЕЧЁТ(2-я куча) то (2-я куча+1)/2+1-я куча, 
    иначе 2-я куча/2+1-я куча)).
    
  • Выразив это в формуле Excel, получим результат, который внесем в ячейку B2:
  •  = МИН(ЕСЛИ(ЕНЕЧЁТ($A2);($A2+1)/2+B$1;$A2/2+B$1);ЕСЛИ(ЕНЕЧЁТ(B$1);(B$1+1)/2+$A2;B$1/2+$A2))
  • Здесь знак $ будем использовать для фиксации столбца А и строки 1 при копировании формулы.
  • Скопируем формулу на всю таблицу.
  • Выделим всю таблицу и используем Условное форматирование для выделения тех значений, которые попадают в выигрыш (<21):
  • Выделенные значения — это значения, которые можно получить в сумме двух куч, выполнив ход из данной ячейки. И по сути, это и есть выигрышные позиции с 1 хода.
  • Далее следуем логике рассуждения: Ваня сможет выиграть своим первым ходом в том случае, если Петя оказывается РЯДОМ с выигрышной позицией, и любой его ход попадает ТОЛЬКО в выигрышные позиции для Вани (в выделенную область). Это позиция при S = 21:

Ответ: 21
✎ Задание 20:

  • Продолжаем работать с той же таблицей, что и в задании 19. Выделим все проигрышные позиции (из которых можно походить только в выигрышные позиции для соперника, т.е. в выделенные ячейки):
  • Петя может выиграть свои вторым ходом, если он не может выиграть первым ходом, но может выполнить ход в позицию, проигрышную для соперника (в ячейку, выделенную красным). Такие позиции назовем выигрышные позиции со второго хода. Найдем минимальное и максимальное значение S при таком первом ходе Пети:
  • При S=44 Пете необходимо уменьшить 2-ю кучу вдвое (44/2 = 22), чтобы оказаться в проигрышной позиции для соперника.

Ответ: 22 44

  
✎ Задание 21:

  • Выделим все такие выигрышные позиции со второго хода:
  • Далее придерживаемся следующей логики: Ваня сможет выиграть свои первым или вторым ходом, но при этом не гарантированно первым ходом, если у Пети будет возможность выполнить ходы только в позиции выигрышные со второго хода. Найдем такое S:
  • При S = 24 Петя сможет уменьшить кучи на один камень, и тогда оказывается в выделенной зеленой области — выигрышные позиции со второго хода для Вани, либо уменьшить количество камней вдвое, и тогда Ваня оказывается в выигрышной позиции с первого хода (розовая область).

Ответ: 24


19_7: с экзамена ЕГЭ 2020г. (со слов учащегося):

Два игрока, Петя и Ваня, играют в следующую игру. На табличке написаны два значения. Оба игрока в свой ход могут заменить одно из значений на сумму обеих (по своему выбору). Первый ход делает Петя. Игра считается законченной когда сумма обеих значений равняется не меньше 56. То есть выигрывает игрок, получивший 56 или более в сумме. Начальное значение (10, S).

Задание 19 ЕГЭ.

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

Задание 20 ЕГЭ.

У кого из игроков есть выигрышная стратегия при начальном значении (9, 15).

Задание 21 ЕГЭ.

У кого из игроков есть выигрышная стратегия при начальном значении (3,7)? Опишите эту стратегию и изобразите дерево всех возможных партий

при этой стратегии

.

Типовые задания для тренировки

✍ Решение:

  • Задание 19.
    Максимальное S при котором Петя НЕ может выиграть своим первым ходом S = 22. Петя проиграет, если в сумме получится 55 и меньше. Первое значение = 10, необходимо найти второе значение, при этом максимальное. Схематично отобразим варианты ходов:
  • (10,22) - ход Пети - (10+22, 22) - итог суммы обеих значений таблички: 32 + 22 = 54 (<56)

    Для того, чтобы сделать сумму большей, Петя заменит первое значение на сумму, так как оно меньше второго значения (10<22)

  • Задание 20.
    В начальной позиции (9, 15) выигрышная стратегия есть у Вани. Для себя отобразим схематично выигрышную партию Вани:
  • дерево выигрышной партии Вани

    Зеленым цветом выделены выигрышные ходы.

  • Задание 21.
    В начальной позиции (3, 7) выигрышная стратегия есть у Вани. Изобразим дерево всех возможных партий при этой стратегии (раз говорится «при этой стратегии» имеем в виду, выигрышную стратегию Вани):
  • дерево всех возможных при этой стратегии партий

    Дерево для выигрышной стратегии Вани: для Вани отображены только ходы по стратегии, для Пети — все возможные ходы. Зеленым цветом — выигрышный ход, красная обводка — ход по стратегии.

Решение подобного задания в Excel смотрите на видео:
📹 Видео

📹 Видеорешение на RuTube здесь


19_6:

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

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

Задание 19 ЕГЭ.

При каких S: 1а) Петя выигрывает первым ходом; 1б) Ваня выигрывает первым ходом?

Задание 20 ЕГЭ.

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

Задание 21 ЕГЭ.

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

✍ Решение:

  • Нарисуем таблицу, в первом столбце которой будем откладывать количество камней в первой куче, а в первой строке — количество камней во второй куче. Получим матрицу. Поскольку в первой куче количество начинается с 5, то это и будет первым значением в таблице. Во второй куче начнем с наибольшего возможного числа — 38:
  • 19 егэ

    Задание 19 а):

  • Далее будем рассуждать так: Петя может выиграть первым ходом, выполнив команду *2 (увеличить количество камней в куче в два раза), если вместо S (кол-во камней во второй куче), мы будем изменять значение, начиная от 20, до последнего возможного по условию значения 38:
  • 5 + 20*2 = 45 (>44)
    
    * 5 - кол-во камней в первой куче, оно не меняется по условию
    
  • Соответственно, все значения большие 20 дадут в результате число большее 44. Укажем это в таблице. + означает выигрышную позицию с первого хода:
  • Ответ 1 а):

    S = [20;38] (На ЕГЭ пояснить ходы, например: (5; 20) -> (Ход Пети)-> (5;40); 40 + 5 = 45)

    Задание 19 б):

  • Поскольку Ваня будет ходить вторым, то необходимо поменять количество камней и в первой куче. Значит рассмотрим ситуации, что Петя мог бы ходить первым ходом в (7;S) и в (10;S). Укажем, будут ли эти позиции выигрышные с одного хода: например (7;19) выигрышная позиция, т.к. игрок выполнит ход в (7;38) и выиграет (7 + 38 = 45). Соответственно, выигрышными являются и все позиции (7;больше 19). Проанализируем таблицу, увеличивая количество камней в первой куче и выполняя поиск выигрышных позиций с одного хода:
  • решение 19 егэ про две кучи камней

  • Последующая логика рассуждений: Ваня может выиграть своим первым ходом, когда Петя своим первым ходом сможет ходить только в выигрышные позиции с первого хода (в +). Отметим такие позиции, учитывая, что это первый ход Пети, и кол-во камней в первой куче должно быть 5. Найденные позиции будут проигрышными позициями (-):
  • Находим единственное такое значение — (5; 19). Т.е. S = 19.
  • Ответ 1 б):

    S = 19 (На ЕГЭ пояснить ходы, например: (5; 19) -> (Ходы Пети): (5;21),(5;28);(7;19);(7;28). Везде следующим ходом выиграет Ваня, см. предыдущ. пункт)

    Задание 20:

  • Обратим внимание, что в таблице, все образовавшиеся «уголки» являются проигрышными позициями (с 1-го хода): то есть если игрок, оказывается в такой позиции, то он может выполнить ход только в выигрышные позиции (то есть следующим ходом выиграет соперник):
  • Логика рассуждений: Петя сможет выиграть своим вторым ходом, когда своим первым ходом он попадет в проигрышную позицию, т.е. переведет соперника в проигрышную ситуацию. Такие значения: S = 16, 17 или 18. Назовем эти позиции выигрышными со второго хода (2+):
Ответ 2:

S = 16, 17 или 18 (На ЕГЭ пояснить ходы, ссылаясь на объяснения в предыдущих пунктах)

Задание 21:

  • Укажем в таблице также позиции, выигрышные с n-го хода: когда игрок может перевести соперника в проигрышную позицию:
  • Укажем также проигрышные позиции со второго хода: игрок, оказавшийся в такой позиции может выполнить ход только на выигрышные позиции (тогда соперник выиграет):
  • Логика рассуждений: Ваня сможет выиграть своим первым или вторым ходом, когда Петя своим первым ходом может попасть только либо в позицию выигрышную с первого хода (+), либо в позицию выигрышную со второго хода или n-го хода (2+). Это позиция при S = 14:

  • Ответ 3: S = 14 (На ЕГЭ пояснить ходы, ссылаясь на объяснения в предыдущих пунктах)

    📹 YouTube здесь

    Видеорешение на RuTube здесь


    Задания для тренировки 19, 20, 21 заданий ЕГЭ (взяты из КИМ и сборников прошлых лет)

    Игра с одной кучей камней

    19_3: Демоверсия ЕГЭ 2018 информатика:

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

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

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

    Задание 19 ЕГЭ
    а) Укажите такие значения числа S, при которых Петя может выиграть в один ход.
    б) Укажите такое значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом. Опишите выигрышную стратегию Вани.

    Задание 20 ЕГЭ
    Укажите два таких значения S, при которых у Пети есть выигрышная стратегия, причем:
    — Петя не может выиграть за один ход;
    — Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.
    Для указанных значений S опишите выигрышную стратегию Пети.

    Задание 21 ЕГЭ
    Укажите значение S, при котором:
    — у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;
    — у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.

    Для указанного значения S опишите выигрышную стратегию Вани. Постройте дерево всех партий, возможных при этой выигрышной стратегии (в виде рисунка или таблицы). На ребрах дерева указывайте, кто делает ход; в узлах — количество камней в позиции

    Дерево не должно содержать партий, невозможных при реализации выигрывающим игроком своей выигрышной стратегии. Например, полное дерево игры не является верным ответом на это задание.

    ✍ Решение:

      Задание 19.

    • а) Петя может выиграть, если S = 15, … 28
    • 15, ..., 28 - выигрышные позиции с первого хода
      
    • б) Ваня может выиграть первым ходом (как бы ни играл Петя), если в куче будет S = 14 камней. Тогда после первого хода Пети в куче будет 15 или 28 камней. В обоих случаях Ваня удваивает кучу и выигрывает в один ход.
    • S = 14
      Петя: 14 + 1 = 15  выигрышная позиция (см. п. а). Выигрывает Ваня
      Петя: 14 * 2 = 28   выигрышная позиция (см. п. а). Выигрывает Ваня
      
      14 - проигрышная позиция
      

      Задание 20.

    • Возможные значения S: 7, 13. В этих случаях Петя, очевидно, не может выиграть первым ходом. Однако он может получить кучу из 14 камней: в первом случае удвоением, во втором — добавлением одного камня. Эта позиция разобрана в п. 1б. В ней игрок, который будет ходить (теперь это Ваня), выиграть не может, а его противник (то есть Петя) следующим ходом выиграет.
    • S = 7
      Петя: 7 * 2 = 14  проигрышная позиция (см. п. 1 б). Выигрывает Петя
      S = 13
      Петя: 13 + 1 = 14 проигрышная позиция (см. п. 1 б). Выигрывает Петя
      
      7, 13 - выигрышные позиции со второго хода
      

      Задание 21.

    • Возможные значения S: 12. После первого хода Пети в куче будет 13 или 24 камня. Если в куче их станет 24, Ваня удвоит количество камней и выиграет первым ходом. Ситуация, когда в куче 13 камней, разобрана в п. 2. В этой ситуации игрок, который будет ходить (теперь это Ваня), выигрывает своим вторым ходом.
    • S = 12
      Петя: 12 + 1 = 13  
      Ваня: 13 + 1 = 14 проигрышная позиция (см. п. 1 б). Выигрывает Ваня вторым ходом!
      

      В таблице изображено дерево возможных партий (и только их) при описанной стратегии Вани. Заключительные позиции (в них выигрывает Ваня) подчеркнуты. На рисунке это же дерево изображено в графическом виде.
      таблица выигрышных стратегий
      Дерево всех партий, возможных при стратегии Вани:
      дерево выигрышных стратегий
      * красный круг означает выигрыш


    19_4: Досрочный егэ по информатике 2018, вариант 1. Задание 19:

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

    Задание 19 ЕГЭ.

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

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

    Задание 20 ЕГЭ.

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

    Задание 21 ЕГЭ.

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

      
    Типовые задания для тренировки

    ✍ Решение:

      19.
      а) S ≥ 14. При количестве камней в куче от 14 и выше Паше необходимо увеличить их количество в пять раз, тем самым получив 70 или более камней.

      S ≥ 14 выигрышные позиции
      

       
      б) S = 13. Паша своим первым ходом может сделать 14, 17 или 65 камней, после этого Вася увеличивает количество в пять раз, получая 70, 85 или 325 камней в куче.

      S = 13 
      Паша 1 ход: 13 + 1 = 14
      Паша 1 ход: 13 + 4 = 17
      Паша 1 ход: 13 * 5 = 65
      
      Ваня 1 ход: [14, 17, 65] * 5 = S ≥ 14  Ваня выигрывает
      
      13 - проигрышная позиция
      

      20. S = 9, 12. Для данных случаев Паше необходимо прибавить 4 камня к куче из 9 камней, либо 1 камень к куче из 12, и получить кучу из 13 камней.
      После чего игра сводится к стратегии, описанной в пункте .

      S = 13 
      Паша 1 ход: 9 + 4 = 13  Паша выигрывает
      Паша 1 ход: 12 + 1 = 13 Паша выигрывает
      
      9, 12 - выигрышные позиции со второго хода
      

      21. S = 8. Своим первым ходом Паша может сделать количество камней в куче 9, 12 или 40. Если Паша увеличивает кол-во в пять раз, тогда Вася выигрывает своим первым ходом, увеличивая количество камней в пять раз.
      Для случая 9 и 12 камней Вася использует стратегию, указанную в п.2.

      S = 8 
      Паша 1 ход: 8 + 1 = 9   Ваня Выигрывает (см. п.2)
      Паша 1 ход: 8 + 4 = 12  Ваня Выигрывает (см. п.2)
      Паша 1 ход: 8 * 5 = 40  
      

      дерево решение 19 задание егэ

    Аналитическое решение 19 задания смотрите на видео:
    📹 YouTube здесь

    Видеорешение на RuTube здесь


    19_1:

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

    Игра завершается в тот момент, когда количество камней в куче становится не менее 28. Если при этом в куче осталось не более 44 камней, то победителем считается игрок, сделавший последний ход. В противном случае победителем становится его противник. Например, если в куче было 23 камня, и Паша удвоит количество камней в куче, то игра закончится и победителем будет Валя. В начальный момент в куче было S камней, 1≤ S ≤ 27.

    Задание 19 ЕГЭ
    а) При каких значениях числа S Паша может выиграть в один ход? Укажите все такие значения и соответствующие ходы Паши.
    б) У кого из игроков есть выигрышная стратегия при S = 26, 25, 24? Опишите выигрышные стратегии для этих случаев.

    Задание 20 ЕГЭ
    У кого из игроков есть выигрышная стратегия при S = 13, 12? Опишите соответствующие выигрышные стратегии.

    Задание 21 ЕГЭ
    У кого из игроков есть выигрышная стратегия при S = 11? Постройте дерево всех партий, возможных при этой выигрышной стратегии (в виде рисунка или таблицы). На ребрах дерева указывайте, кто делает ход; в узлах — количество камней в позиции.

    ✍ Решение:

    1. Задание 19 ЕГЭ:

      а) Паша имеет выигрышную стратегию и может выиграть за один ход, если S = 27: тогда ему достаточно добавить один камень, чтобы игра закончилась при 28 камнях в куче; или если S = 14, 15, 16, 17, 18, 19, 20, 21, 22 (44/2 = 22 и 28/2 = 14, т.е. от 14 до 22): тогда необходимо удвоить кучу.

      S=27
      Паша: 27 + 1 = 28 - Выигрыш!
      
      27 - выигрышная позиция
      

      б) При S = 26 выигрышная стратегия есть у Вали. Паша делает ход первым, у него есть возможность либо удвоить количество камней в куче, и тогда количество превысит 44, — выигрывает Валя; либо увеличить количество на один камень, станет 27 камней: следующая Валя, — она может положить один камень и выиграть.

      S=26
      Паша: 26 * 2 = 52   Валя выигрывает! или:
      Паша: 26 + 1 = 27
      Валя: 27 + 1 = 28 - Выигрыш! 
      
      26 - проигрышная позиция
      

      При S = 25 выигрышная стратегия есть у Паши. Удваивать количество камней нет смысла, т.к. количество превысит 44, значит, Паша добавит один камень, их станет 26, следующая Валя, — она может либо добавить камень (станет 27 камней, следующим ходом выиграет Паша) либо удвоить — и сразу проиграть, т.к. станет более 44 камней.

      S=25
      Паша: 25 + 1 = 26
      Валя: 26 ...  проигрышная позиция (см. выше) Паша выигрывает!
      
      25 - выигрышная позиция
      

      При S = 24 выигрышная стратегия есть у Вали. Паша делает ход первым: удваивать кучу нет смысла, т.к. в ней станет более 44, значит, Паша добавит один камень, их станет 25; следующая — Валя: она может только добавить один камень (станет 26 камней, следующим ходом Паша оказывается в проигрышной позиции, см. пункт при S = 26).

      S=24
      Паша: 24 + 1 = 25 
      Валя: 25 ...  выигрышная позиция (см. выше) Валя выигрывает!
       
      24 - проигрышная позиция
      
    2. Задание 20 ЕГЭ:

      При S = 13 или S = 12 выигрышная стратегия есть у Паши. Паша удваивает количество и в куче остается 26 или 24 камня. Это проигрышная позиция для того, кто ходит (см. п. 1 б), а следующий ход за Валей.

    3. Задание 21 ЕГЭ:

      При S = 11 выигрышная стратегия есть у Вали. Паша делает первый ход: в куче остается либо 22, либо 12 камней. Обе эти позиции выигрышные для того, кто ходит. При S = 12 последовательность игры описана в пункте 2, а при S = 22 — в пункте .

        
      Дерево возможных партий:
      задание 19 егэ дерево игры

      * Для Вали отображены только ходы по стратегии
      ** красный круг означает выигрыш
      *** фиолетовый круг — конец игры (проигрыш)

    Подробное объяснение 19 задания ЕГЭ смотрите на видео (аналитическое решение):

    📹 YouTube здесь
    Видеорешение на RuTube здесь


    Игра с двумя кучами камней или табличка

    19_5:

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

    Задание 1.

    Для каждой из начальных позиций (6, 33), (8, 32) укажите, кто из игроков имеет выигрышную стратегию. В каждом случае опишите выигрышную стратегию; объясните, почему эта стратегия ведёт к выигрышу, и укажите, какое наибольшее количество ходов может потребоваться победителю для выигрыша при этой стратегии.

    Задание 2.

    Для каждой из начальных позиций (6, 32), (7, 32), (8, 31) укажите, кто из игроков имеет выигрышную стратегию.

    Задание 3.

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

    ✍ Решение:

    • Задание 1. В начальных позициях (6, 33), (8, 32) выигрышная стратегия есть у Вани.
    • Задание 2. В начальных позициях (6, 32), (7, 32) и (8, 31) выигрышная стратегия есть у Пети.
    • Задание 3. В начальной позиции (7, 31) выигрышная стратегия есть у Вани.
    • дерево выигрышной стратегии

    Видео решения 19 задания с двумя кучами (аналитическое решение):
    📹 YouTube здесь

    Видеорешение на RuTube здесь


    Игра с набором слов

    19_2: 2017 год (один из вариантов со слов выпускника):

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

    Например, есть набор слов {Волк, Информатика, Страшно}; для заданного набора слов Петя своим первым ходом может назвать букву В, И или С. Если Петя выберет букву В, то победит Ваня (следующие ходы: Петя — В, Ваня — О, Петя — Л, Ваня — К).

      
    Задание 1
    А) Даны 2 слова (набора букв) {ИКЛМНИКЛМНХ, НМЛКИНМЛКИ}. Определить выигрышную стратегию.

    Б) Даны 2 слова {ТРИТРИТРИ…ТРИ, РИТАРИТАРИТАРИТА…РИТА}. В первом слове 99 букв, во втором 164. Определить выигрышную стратегию.

    Задание 2
    Необходимо поменять две буквы местами из набора пункта в слове с наименьшей длинной так, чтобы выигрышная стратегия была у другого игрока. Объяснить выигрышную стратегию.

    Задание 3
    Дан набор слов {Ворона, Волк, Волна, Производная, Прохор, Просо}. У кого из игроков есть выигрышная стратегия? Обосновать ответ и написать дерево всех возможных партий для выигрышной стратегии.

    ✍ Решение:

    1. А) Для выигрыша Пете достаточно выбрать первую букву слова с нечетным количеством букв, тогда последний ход делает Петя. При исходном наборе слов выигрышная стратегия есть у Пети. Она заключается в том, что своим первым ходом он должен выбрать букву И (слово ИКЛМНИКЛМНХ из 11 букв). Ване придется выбрать букву К. Таким образом, они последовательно будут называть буквы первого слова, пока Петя не выберет последнюю букву Х. На этом игра закончится выигрышем Пети. При данной стратегии возможна только одна партия. Заключением партии будет написано слово ИКЛМНИКЛМНХ.

      Б) При исходном наборе слов выигрышная стратегия есть у Пети. Она заключается в том, чтобы выбрать слово с нечетным количеством букв, т.к. при такой стратегии последнюю букву в любом случае записывает Петя. Т.о., Петя должен выбрать букву Т, т.к. в первом слове 99 букв.

    2. Если поменять местами во втором слове (НМЛКИНМЛКИ) буквы Н и И, то получится следующий набор слов:
      {ИКЛМНИКЛМНХ, ИМЛКННМЛКИ}
      

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

    3. Выигрышная стратегия есть у Вани, так как при любом выборе Пети, Ваня может перевести игру в проигрышную позицию для Пети, т.е. «перейти» на слово с четным количеством букв. Такая стратегия позволит Ване написать последнюю букву и тем самым выиграть игру.
    4. Дерево возможных партий:
      дерево партий

    * Для Вани отображены только ходы по стратегии
    ** Красный круг означает выигрыш

    Подробней с решением задания про слова ознакомьтесь в видеоуроке (аналитическое решение):

    📹 YouTube здесь

    Видеорешение на RuTube здесь


    Доброго времени суток каждому жителю Хабрвилля! Давненько я не писал статей! Пора это исправить!

    В сегодняшней статье поговорим о насущной для многих выпускников школ теме — ЕГЭ. Да-да-да! Я знаю, что Хабр — это сообщество разработчиков, а не начинающих айтишников, но сейчас ребятам как никогда нужна поддержка именно сообщества. Ребят опять посадили на дистант. Пока не ясно на какой период, но уже сейчас можно сказать, что ЕГЭ по информатике будет на компьютерах и его можно зарешать при помощи языка Python.

    Вот я и подумал, чтобы не получилось как в песне, стоит этим заняться. Я расскажу про все задачи первой части и их решения на примере демо варианта ЕГЭ за октябрь.

    Всех желающих — приглашаю ниже!

    Быстрый перевод из системы в систему

    В Python есть интересные функции bin(), oct() и hex(). Работают данные функции очень просто:

    bin(156) #Выводит '0b10011100'
    oct(156) #Выводит '0o234'
    hex(156) #Выводит '0x9c'

    Вывод в интерпретационном режиме

    Вывод в интерпретационном режиме

    Как вы видите, выводится строка, где 0b — означает, что число далее в двоичной системе счисления, 0o — в восьмеричной, а 0x — в шестнадцатеричной. Но это стандартные системы, а есть и необычные…

    Давайте посмотрим и на них:

    n = int(input()) #Вводим целое число
     
    b = '' #Формируем пустую строку
     
    while n > 0: #Пока число не ноль
        b = str(n % 2) + b #Остатот от деления нужной системы (в нашем сл записываем слева
        n = n // 2 #Целочисленное деление
     
    print(b) #Вывод

    Данная программа будет работать при переводе из десятичной системы счисления в любую до 9, так как у нас нет букв. Давайте добавим буквы:

    n = int(input()) #Вводим целое число
    
    b = '' #Формируем пустую строку
    
    while n > 0: #Пока число не ноль
    	if (n % 21) > 9: #Если остаток от деления больше 9...
    		if n % 21 == 10: #... и равен 10...
    			b = 'A' + b #... запишем слева A
    		elif n % 21 == 11:#... и равен 11...
    			b = 'B' + b#... запишем слева B
    
    '''
    
    И так далее, пока не дойдём до системы счисления -1 (я переводил в 21-ную систему и шёл до 20)
    
    '''
    
    		elif n % 21 == 11:
    			b = 'B' + b
    		elif n % 21 == 12:
    			b = 'C' + b
    		elif n % 21 == 13:
    			b = 'D' + b
    		elif n % 21 == 14:
    			b = 'E' + b
    		elif n % 21 == 15:
    			b = 'F' + b
    		elif n % 21 == 16:
    			b = 'G' + b
    		elif n % 21 == 17:
    			b = 'H' + b
    		elif n % 21 == 18:
    			b = 'I' + b
    		elif n % 21 == 19:
    			b = 'J' + b
    		elif n % 21 == 20:
    			b = 'K' + b
    	else: #Иначе (остаток меньше 10)
    		b = str(n % 21) + b #Остатот от деления записываем слева
    	n = n // 21 #Целочисленное деление
    
    print(b) #Вывод

    Способ объёмен, но понятен. Теперь давайте используем тот же функцию перевода из любой системы счисления в любую:

    def convert_base(num, to_base=10, from_base=10):
        # Перевод в десятичную систему
        if isinstance(num, str): # Если число - строка, то ...
            n = int(num, from_base) # ... переводим его в нужную систему счисления
        else: # Если же ввели число, то ...
            n = int(num) # ... просто воспринять его как число
        # Перевод десятичной в 'to_base' систему
        alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" # Берём алфавит
        if n < to_base: # Если число меньше системы счисления в которую переводить...
            return alphabet[n] # ... вернуть значения номера в алфавите (остаток от деления)
        else: # Иначе...
            return convert_base(n // to_base, to_base) + alphabet[n % to_base] # ... рекурсивно обратиться к функии нахождения остатка

    Вызвав функцию вывода print(convert_base(156, 16, 10)) мы переведём 156 из 10 в 16 систему счисления, а введя print(convert_base('23', 21, 4)) переведёт 23 из 4-ичной в 21-ичную систему (ответ: B).

    Задача 2

    Все задания беру из первого октябрьского варианта (он же вариант № 9325894) с сайта Решу.ЕГЭ.

    Решение данной задачи совсем простое: банальный перебор.

    print('y', 'x', 'z', 'F') #Напечатаем заголовки таблицы
    for y in range(2): #Берём все переменные и меняем их в циклах '0' и '1'
    	for x in range(2):
    		for z in range(2):
    			for w in range(2):
    				F = ((not x or y) == (not z or w)) or (x and w) #Записываем функцию
    				print(x, y, z, F) #Выводим результат

    Результат:

    Нам вывелась вся таблица истинности (1 = True, 0 = False). Но это не очень удобно. Обратите внимание, что в задании, функция равно 0, так и давайте подправим код:

    print('y', 'x', 'z', 'F') #Напечатаем заголовки таблицы
    for y in range(2): #Берём все переменные и меняем их в циклах '0' и '1'
    	for x in range(2):
    		for z in range(2):
    			for w in range(2):
    				F = ((not x or y) == (not z or w)) or (x and w) #Записываем функцию
    				if not F:
    					print(x, y, z, F) #Выводим результат

    Результат:

    Далее — простой анализ.

    Задача 5

    Данная задача легко решается простой последовательностью действий в интерпретационном режиме:

    Задача 6

    Перепечатали и получили ответ:

    s = 0
    k = 1
    while s < 66:
        k += 3
        s += k
    print(k)

    Задача 12

    В очередной раз, просто заменим слова на код:

    a = '9' * 1000
    
    while '999' in a or '888' in a:
    	if '888' in a:
    		a = a.replace('888', '9', 1)
    	else:
    		a = a.replace('999', '8', 1)
    print(a)

    Задача 14

    Компьютер железный, он всё посчитает:

    a = 4 ** 2020 + 2 ** 2017 - 15
    k = 0
    
    while a > 0:
        if a % 2 == 1:
        	k += 1
        a = a // 2
    
    print(k)

    Задача 16

    Опять же, просто дублируем программу в python:

    def F(n):
        if n > 0:
            F(n // 4)
            print(n)
            F (n - 1)
    print(F(5))

    Результат:

    Задача 17

    Задача с файлом. Самое сложное — достать данные из файла. Но где наша не пропадала?!

    with open("17.txt", "r") as f: #Открыли файл 17.txt для чтения
        text = f.read() #В переменную text запихнули строку целиком
    a = text.split("n") #Разбили строку энтерами (n - знак перехода на новую строку)
    
    k = 0 #Стандартно обнуляем количество
    m = -20001 #Так как у нас сумма 2-ух чисел и минимальное равно -10000, то минимум по условию равен -20000, поэтому...
    
    for i in range(len(a)): #Обходим все элементы массива
    	if (int(a[i - 1]) % 3 == 0) or (int(a[i]) % 3 == 0): #Условное условие
    		k += 1 #Счётчик
    		if int(a[i - 1]) + int(a[i]) > m: #Нахождение минимума
    			m = int(a[i - 1]) + int(a[i])
    
    print(k, m) #Вывод

    Немного пояснений. Функция with() открывает файл считывает данные при помощи функции read() и закрывает файл. В остальном — задача стандартна.

    Задача 19, 20 и 21

    Все три задачи — задачи на рекурсию. Задачи идентичны, а вопросы разные. Итак, первая задача:

    Пишем рекурсивную функцию и цикл перебора S:

    def f(x, y, p): #Рекурсивная функция
    	if x + y >= 69 or p > 3: #Условия завершения игры
    		return p == 3
    	return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or
    		   f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий
    
    for s in range (1, 58 + 1): #Перебор S
    	if f(10, s, 1): #Начали с 10 камней
    		print(s)
    		break

    Немного пояснений. В рекурсивной функции существует 3 переменные x — число камней в первой куче, y — число камней во второй куче, p — позиция. Позиция рассчитывается по таблице:

    Игра

    Петя

    Ваня

    Петя

    Ваня

    Петя

    p

    1

    2

    3

    4

    5

    6

    Далее — всё по условию задачи.

    Вторая задача на теорию игр:

    Все отличия в рамке. Ну и код, соответственно, не сильно отличается:

    def f(x, y, p): #Рекурсивная функция
    	if x + y >= 69 or p > 4: #Условия завершения игры
    		return p == 4
    	if p % 2 != 0:
    		return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or
    			   f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий
    	else:
    		return f(x + 1, y, p + 1) and f(x, y + 1, p + 1) and
    			   f(x * 2, y, p + 1) and f(x, y * 3, p + 1) #Варианты действий
    
    
    for s in range (1, 58 + 1): #Перебор S
    	if f(10, s, 1): #Начали с 10 камней
    		print(s)

    Отличия:

    1. Выиграл Петя, соответственно, позиция 4

    2. Так как Петя не может выиграть за один ход — он выигрывает за 2 хода (and, а не or на нечётных позициях (играх Пети))

    3. Убрали break, так как нам нужны все S, а не единственный

    Последняя вариация задачи:

    Сразу код:

    def f(x, y, p): #Рекурсивная функция
    	if x + y >= 69 or p > 5: #Условия завершения игры
    		return p == 3 or p == 5
    	if p % 2 == 0:
    		return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or
    			   f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий
    	else:
    		return f(x + 1, y, p + 1) and f(x, y + 1, p + 1) and
    			   f(x * 2, y, p + 1) and f(x, y * 3, p + 1) #Варианты действий
    
    
    for s in range (1, 58 + 1): #Перебор S
    	if f(10, s, 1): #Начали с 10 камней
    		print(s)

    Ну и всего лишь 2 отличия:

    1. Позиции 3 или 5, а не 4, так как выиграл Ваня

    2. На второй ход выигрывает Ваня и нам нужно or и and поменять. Я заменил только кратность 2.

    Задача 22

    Ctrl+C, Ctrl+V — наше всё! :)

    for i in range(1, 100000):
    	x = i
    	L = 0
    	M = 0
    	while x > 0 :
    		L = L+1
    		if (x % 2) != 0:
    			M = M + x % 8
    		x = x // 8
    	if L == 3 and M == 6:
    		print(i)

    Задача 23

    Итак, код:

    def f(x, y):
    	if x > y: #Перегнали цель
    		return 0
    	if x == y:  #Догнали цель
    		return 1
    	if x < y: #Догоняем цель тремя методами
    		return f(x + 1, y) + f(x + 2, y) + f(x * 2, y)
    
    print(f(3, 10) * f(10, 12)) #Прошло через 10, значит догнали 10 и от де догоняем 12

    Так как в условии задачи мы увеличиваем число, но будем числа «догонять». Три метода описаны, ну а пройти через 10 — значит дойти до него и идти от него.

    Собственно, это и есть вся первая часть ЕГЭ по информатике решённая на Python.

    Ссылка на репозиторий со всеми программами:

    Надеюсь, что смог помочь в своей статье выпускникам и готовящимся ;)

    Остался один вопрос — нужен ли разбор второй части ЕГЭ по информатике на Python? Оставлю этот вопрос на ваше голосование.

    Всем удачи!

    Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

    Делаю разбор второй части?

    Проголосовали 106 пользователей.

    Воздержались 15 пользователей.

    Понравилась статья? Поделить с друзьями:
  • Решение 18 номера егэ математика профиль
  • Решение 18 варианта егэ по математике ященко профильный 2023
  • Решение 17 номера егэ по математике профиль
  • Решение 17 номера егэ информатика на питоне
  • Решение 17 задания егэ по информатике в экселе