решай.ai · шпаргалка

Задание 23: Оператор присваивания и ветвления. Перебор вариантов, построение дерева

ЕГЭ Информатика

Как выглядит

Типичная формулировка: "Исполнитель преобразует число на экране. У исполнителя есть команды с номерами 1, 2, 3... Программа — последовательность команд. Сколько существует программ, которые переводят число AA в число BB, при этом траектория вычислений содержит (не содержит) число CC?"

…

Что нужно знать

  • Исполнитель — объект с фиксированным набором команд; каждая команда — функция, однозначно преобразующая число.
  • Программа — конечная последовательность номеров команд, применяемых по порядку.
  • Траектория вычислений — последовательность чисел, полученных после каждой команды (исходное число в неё не входит, конечное — входит).
  • Принцип умножения: если путь состоит из двух независимых участков, реализуемых nn и mm способами, общее число программ равно n⋅mn \cdot m.
  • Рекуррентная формула количества программ, приводящих число x0x_0 к числу xx через набор команд с приростами c1,c2,…,ckc_1, c_2, \dots, c_k (или деление для обратной операции умножения): N(x)=∑i=1kN(x−ci),N(x) = \sum_{i=1}^{k} N(x - c_i), где N(x0)=1N(x_0) = 1, а N(x)=0N(x) = 0, если значение xx недостижимо (меньше x0x_0 или не получается ни одной командой).
  • Правило обязательного этапа: если траектория обязана содержать число mm, то Nвсего=Nx0→m⋅Nm→xtarget.N_{\text{всего}} = N_{x_0 \to m} \cdot N_{m \to x_{\text{target}}}.
  • Правило избегаемого этапа: чтобы запретить прохождение через mm, при построении таблицы полагают N(m)=0N(m) = 0 независимо от того, что дала бы формула, — тогда все более дальние значения автоматически не учитывают пути через mm.

Алгоритм

  1. Выписать все команды и числовые операции, которые они выполняют.
  2. Определить исходное число x0x_0 и целевое xtx_t; убедиться, что команды монотонны (только увеличивают или только уменьшают число) — это гарантирует, что таблицу можно строить по возрастанию (или убыванию) без циклов.
  3. Если есть обязательное число mm: разбить задачу на две части — от x0x_0 до mm и от mm до xtx_t. Построить таблицу N(x)N(x) для каждой части отдельно, начиная считать заново с единицы на старте своего участка.
  4. Если есть избегаемое число qq: строить единую таблицу от x0x_0 до xtx_t, но на каждом шаге, когда таблица "доходит" до значения qq, принудительно поставить N(q)=0N(q)=0 и продолжать расчёт дальше как обычно. …

Ловушки

  • Забывают, что исходное число не входит в траекторию, а конечное — входит; это меняет, какие значения нужно "закрывать" запретом.
  • При обязательном этапе начинают вторую таблицу не с единицы на самом числе mm, а продолжают первую таблицу — это даёт неверный результат, так как вторая часть пути должна считаться как отдельная задача с новым стартом.
  • При работе с командой умножения/деления забывают проверить, что частное целое и не меньше стартового значения — иначе в таблицу попадают несуществующие переходы.
  • При избегаемом этапе вычитают количество "плохих" путей из общего числа вместо того, чтобы просто обнулить значение в таблице на нужном шаге — это приводит к двойному учёту или потере части путей. …
reshay.ai/ege/informatika/zadanie-23 — задачи с разборами и тренажёр

Полный гайд и задачи задания 23 →