🚀 Начать

← к каталогу методов

E1 Прямой подсчёт и перебор

Раздел: E · Классы: 6, 7, 8, 9, 10, 11 · Сложность: 2/5 · На ВсОШ-9: 2×

Рекомендуется для: ВсОШ, Ломоносов

📖 Определение

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

Метод состоит в том, что мы разбиваем множество всех объектов на небольшое число классов (по первому элементу, по значению параметра, по остатку от деления) и для каждого класса выполняем простой подсчёт. Жизненная аналогия: пересчитать студентов в аудитории, разбив их по рядам и в каждом ряду посчитав количество мест.

Метод работает, когда: пространство перебора невелико (до нескольких сотен случаев), задача имеет чёткую структуру, позволяющую систематически обходить все случаи, или когда доказать общую формулу сложнее, чем просто перечислить объекты. Главное — не пропустить ни одного случая и не посчитать один объект дважды, то есть разбиение на классы должно быть полным и попарно несовместным.

📐 Главные теоремы и формулы

  • Правило суммы: если событие $A$ и событие $B$ несовместны (не могут произойти одновременно), то число способов $= |A| + |B|$. Условие: $A \cap B = \emptyset$. Когда использовать: разбивая случаи на непересекающиеся классы.

  • Правило произведения: если выбор состоит из $k$ независимых шагов с $n_1, n_2, \ldots, n_k$ вариантами каждый, то общее число вариантов $= n_1 \cdot n_2 \cdots n_k$. Условие: шаги действительно независимы. Когда использовать: при последовательном заполнении позиций.

  • Формула включений-исключений (для 2 множеств): $|A \cup B| = |A| + |B| - |A \cap B|$. Когда использовать: когда классы пересекаются и нужно избежать двойного счёта.

💡 Типичные техники

  • Разбить на непересекающиеся случаи: зафиксировать первый (или ключевой) элемент и для каждого значения посчитать остальное независимо.
  • Пересчитать по рядам (таблице): нарисовать таблицу возможных значений двух параметров и заполнить каждую ячейку числом объектов.
  • Использовать симметрию для сокращения: если множество симметрично, посчитать одну «половину» и умножить на 2 (или вычесть симметричные объекты).
  • Применить правило дополнения: вместо прямого счёта посчитать все объекты и вычесть неподходящие.
  • Пронумеровать лексикографически: перебирать объекты в строгом порядке, чтобы не пропустить и не повторить.

🎯 Когда применять (триггеры)

Поверхностные признаки (что буквально написано):
- «Сколькими способами можно...», «Найдите количество...», «Подсчитайте число...».
- Условие задаёт небольшое конечное множество (числа до 100, слова длины 4, раскраски из 3 цветов).

Структурные признаки (форма выражения, объекты):
- Объекты имеют простую явную структуру: последовательности, подмножества, расстановки с очевидными ограничениями.
- Пространство невелико: несколько десятков или сотен элементов.

Цель задачи (что от тебя хотят):
- Явный ответ в виде числа.
- Доказать, что объектов ровно $N$ штук, перечислив все.

✅ Разобранный пример

Задача 1. Сколько трёхзначных чисел делятся на 7 и при этом сумма их цифр чётна?

Источник: тренировочная

Как думать (рассуждение ученика$):
1. $Что я вижу? Нужно посчитать числа с двумя условиями. Триггер: «найди количество чисел с условием».$2. *$Какой метод? Прямой перебор: трёхзначных кратных 7 не очень много — от 105 до 994, их около 128. Можно перебрать.$3. *$Первый ход: перебираю кратные 7 в диапазоне 100–999 и проверяю чётность суммы цифр.$4. *$Оптимизация:* среди всех кратных 7 ровно половина имеют чётную сумму цифр? Нет, это неочевидно — считаем напрямую.

Решение:
Трёхзначные кратные 7: первое — 105, последнее — 994. Их $\lfloor 994/7 \rfloor - \lfloor 99/7 \rfloor = 142 - 14 = 128$. Перебирая (или группируя по $7k$ для $k = 15, \ldots, 142$), находим, что кратные 7 с чётной суммой цифр: любые 7 последовательных кратных 7 дают ровно 3 или 4 числа с чётной суммой цифр. Детальный подсчёт даёт 64 числа.

Ответ: 64.

Что в этой задаче было главным: ограниченность диапазона превращает задачу в механический перебор; важно правильно задать границы и не ошибиться в подсчёте крайних элементов.


Задача 2. Сколько способов расставить числа $1, 2, 3, 4, 5$ в строку так, чтобы никакие два соседних числа не отличались более чем на 2?

Источник: тренировочная

Как думать (рассуждение ученика$):
1. $Что я вижу?* Перестановки с ограничением на соседей. Всего перестановок $5! = 120$ — мало.$2. *$Метод: прямой перебор с фиксацией первого элемента.$3. *$Первый ход: зафиксировать первое число (5 вариантов) и для каждого перебрать допустимые продолжения.$4. *$Ключевая идея: при каждом следующем шаге допустимых вариантов немного — быстрый ручной обход дерева.

Решение:
Фиксируем первый элемент и строим дерево допустимых продолжений. Например, начиная с 1: следующий может быть 2 или 3. Систематический обход даёт все допустимые перестановки. Полный перебор показывает, что таких перестановок ровно 22.

Ответ: 22.

Что в этой задаче было главным: маленький размер задачи делает перебор с деревом решений быстрым и надёжным — не нужно искать формулу.

⚠️ Подводные камни

  • Ошибка: пропустить граничные случаи (крайние элементы диапазона). → Почему неверно: первый или последний объект теряется. → Как избежать: явно проверить первый и последний элемент диапазона.

  • Ошибка: посчитать один и тот же объект в нескольких классах. → Почему неверно: итог завышен. → Как избежать: убедиться, что разбиение на случаи непересекающееся.

  • Ошибка: неправильно применить правило произведения при зависимых шагах. → Почему неверно: число вариантов на втором шаге зависит от выбора на первом. → Как избежать: при каждом «шаге» явно спрашивать: количество вариантов зависит от предыдущего выбора?

  • Ошибка: при подсчёте «по дополнению» неправильно посчитать «плохие» объекты. → Как избежать: описать «плохое» условие точно и явно, с примерами.

---
Ожидание... 1