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

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

ЕГЭ-Информатика — Задание 23: Полный разбор и готовые шаблоны

Задание 23 сводится к подсчёту количества программ (путей) из числа x в число y по разрешённым
командам. Часто добавляются условия: «не содержит …», «обязательно содержит …», «A раньше B», «хотя бы одно из множества», и т. п.

Идея: используем рекурсию с мемоизацией (functools.lru_cache) или динамику «снизу-вверх»; запреты и обязательные точки учитываем в базах/флагах.

1) База: считаем число программ

Монóтонно вверх (например +1, +2, *2)

Монóтонно вниз (например -1, -4, //3)

Смешанные команды (и вверх, и вниз): задайте разумные границы (например, если x сильно вырос — вернуть 0) и обязательно используйте lru_cache.

2) Запрет «не содержит K»

3) Обязательная точка «содержит A»

Разбиваем маршрут и перемножаем: количество путей x → … → A → … → y равно f(x,A) * f(A,y).

4) «Содержит A и не содержит B»

Запрет — в теле f, обязательную точку учитываем умножением сегментов.

5) «Содержит хотя бы одно из {A, B}»

Вариант A. Включения–исключения (коротко и быстро)

Вариант B. Счётчик посещений (универсально)

6) Порядок «A раньше B»

Последовательно перемножаем сегменты:

Если есть запрет (например, «не содержит 56»), добавьте if x == 56: return 0 в f.

7) «Хотя бы одно из T, но не содержит Z»

8) Готовые «боевые» примеры

Демо-2026: 19 → 2, команды -1, -4, //3, не содержит 7, обязательно 13

ФИПИ 2025 (пример): 3 → 18, команды +1, +2, *2, обяз. 14, запрет 8

«Хотя бы одно из {14,18}»: два способа

Используйте включения–исключения (короче) или счётчик посещений (гибче).

9) Динамика «снизу-вверх» (без рекурсии)

10) Частые ошибки

  • Неверные базы. Для «вверх» задач: if x > y: return 0, для «вниз»: if x < y: return 0; совпадение: if x == y: return 1 (с учётом флагов).
  • Запрет/условие проверяют поздно. Ставьте проверку сразу при входе в f.
  • // путают с «делится на 3». Команда «найти целую часть от деления на 3» — это всегда x//3, разрешена всегда.
  • Смешанные операции без ограничений приводят к блужданию. Вводите лимиты и используйте @lru_cache.
  • Обязательные точки удобнее учитывать умножением сегментов: f(x,A)*f(A,y), f(x,A)*f(A,B)*f(B,y).

11) Мини-шпаргалка: условие → код

  • Не содержит K: if x == K: return 0
  • Не содержит множество: if x in BAD: return 0
  • Содержит A: f(x,A)*f(A,y)
  • Содержит A раньше B: f(x,A)*f(A,B)*f(B,y)
  • Содержит хотя бы одно из T: включения–исключения или флаг seen
  • Содержит A, но не содержит B: запрет в f + умножение сегментов
  • Содержит хотя бы k из T: счётчик cnt и база return 1 if cnt >= k else 0
Эти шаблоны покрывают большинство формулировок 23-го задания: подставьте свои команды, границы и условия — получите короткое и надёжное решение.