РУҚА
Задание № 15 · ОГЭ

Стратегия решения задачи Водолей

Как выбирать переливания и последовательно получать нужный объём воды
6 мин чтенияСложность: Обновлено 29 сентября 2026

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

Модель задачи и состояние сосудов

Перед решением нужно внимательно выписать вместимость каждого сосуда, начальное состояние и цель. Обычно сосуды обозначают буквами \(A\), \(B\), \(C\), а их вместимости — \(a\), \(b\), \(c\) литров. Состояние двух сосудов удобно записывать как \((x,y)\), где \(x\) — объём воды в первом сосуде, а \(y\) — во втором.

D
Состояние исполнителя

Состояние \((x,y)\) — это описание количества воды в сосудах в данный момент. Для сосудов вместимостей \(a\) и \(b\) выполняются ограничения \(0\le x\le a\) и \(0\le y\le b\).

Если в задаче есть третий сосуд, состояние записывают как \((x,y,z)\). Каждая команда изменяет состояние по строго определённому правилу. Поэтому решение можно рассматривать как таблицу переходов автомата: строка содержит текущее состояние, команду и новое состояние.

  • Заполнить сосуд до краёв: объём становится равным его вместимости.
  • Опустошить сосуд: объём становится равным нулю.
  • Перелить из одного сосуда в другой: переливание заканчивается, когда первый сосуд пуст или второй заполнен.
Что записать до начала решения

Сначала выпишите вместимости сосудов, начальное состояние и условие окончания. Например: сосуды \(A\) и \(B\) имеют вместимости \(5\) и \(3\) литра, начальное состояние \((0,0)\), цель — получить \(4\) литра в сосуде \(A\).

Как работают команды переливания

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

\[\operatorname{pour}_{A\to B}(x,y)=\left(x-\min(x,b-y),\ y+\min(x,b-y)\right)\]1

В формуле \(x\) и \(y\) — текущие объёмы, а \(b\) — вместимость сосуда \(B\). Величина \(\min(x,b-y)\) показывает, сколько воды действительно можно перелить: не больше, чем есть в \(A\), и не больше, чем помещается в \(B\).

T
Правило переливания

При переливании из \(A\) в \(B\) вода движется до одного из двух событий: \(A\) становится пустым или \(B\) становится полным. Аналогичное правило действует для переливания из \(B\) в \(A\).

КомандаРезультат
Наполнить \(A\)\((a,y)\)
Опустошить \(A\)\((0,y)\)
Наполнить \(B\)\((x,b)\)
Опустошить \(B\)\((x,0)\)
Перелить \(A\to B\)уменьшить \(A\), увеличить \(B\)
Перелить \(B\to A\)увеличить \(A\), уменьшить \(B\)
AB5 л3 лA → B
Переливание из сосуда A в сосуд B: процесс заканчивается, когда A пуст или B полон.

Стратегия построения последовательности

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

  1. Определите, в каком сосуде должен появиться нужный объём.
  2. Выберите сосуд, который будете наполнять и переливать первым.
  3. Записывайте состояние после каждой команды.
  4. Проверяйте, не достигнута ли цель после каждого перехода.
  5. Если возникло знакомое состояние, измените направление переливания или попробуйте другую ветвь.
Практический приём

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

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

Микропроверка

В сосудах вместимостью \(5\) и \(3\) литра состояние равно \((5,2)\). Что произойдёт после команды переливания \(A\to B\)?

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

Пусть есть сосуды \(A\) и \(B\) вместимостью \(5\) и \(3\) литра. Вначале оба пусты. Требуется получить ровно \(4\) литра в сосуде \(A\). Будем использовать команды наполнения, переливания и опустошения.

№
Цель примера

Начальное состояние — \((0,0)\), целевое состояние может быть \((4,0)\) или любое состояние, где в сосуде \(A\) находится 4 литра. Команды записываем кратко: «наполнить A», «перелить A в B» и так далее.

1
Наполняем сосуд A, чтобы получить исходный запас воды.
\(\displaystyle (0,0)\xrightarrow{\text{наполнить }A}(5,0)\)
2
Переливаем A в B. Сосуд B вмещает 3 литра, поэтому в A остаётся 2 литра.
\(\displaystyle (5,0)\xrightarrow{A\to B}(2,3)\)
3
Опустошаем B, освобождая место для следующего переливания.
\(\displaystyle (2,3)\xrightarrow{\text{опустошить }B}(2,0)\)
4
Переливаем оставшиеся 2 литра из A в B.
\(\displaystyle (2,0)\xrightarrow{A\to B}(0,2)\)
5
Снова наполняем A до 5 литров.
\(\displaystyle (0,2)\xrightarrow{\text{наполнить }A}(5,2)\)
6
Переливаем из A в B. В B свободен только 1 литр, поэтому в A останется 4 литра.
\(\displaystyle (5,2)\xrightarrow{A\to B}(4,3)\)

Получено состояние \((4,3)\): в сосуде \(A\) ровно 4 литра. Если условие требует, чтобы остальные сосуды были пустыми, нужно продолжить решение и перелить или вылить воду из \(B\), не изменяя требуемый объём в \(A\), если это разрешено условиями.

\[(0,0)\to(5,0)\to(2,3)\to(2,0)\to(0,2)\to(5,2)\to(4,3)\]2
T
Проверка каждого шага

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

Невозможность и типичные ошибки

Иногда требуемый объём получить нельзя. Для двух сосудов без делений и других специальных операций возможные остатки связаны с наибольшим общим делителем их вместимостей. Если начальный объём равен нулю, достижимый объём должен быть кратен \(\gcd(a,b)\) и не превышать вместимость нужного сосуда.

T
Критерий достижимости

При сосудах вместимостей \(a\) и \(b\) и начальном отсутствии воды объём \(d\) можно получить только если \(d\) кратен \(\gcd(a,b)\). Если \(\gcd(a,b)=1\), в принципе достижим любой целый объём, не превышающий вместимость одного из сосудов.

Подробные рассуждения о таких случаях приведены на странице «Невозможность получения объёма». При переборе вариантов полезно применять правило отсечения ветвей: не продолжать путь, если он уже повторяет посещённое состояние или нарушает условие задачи.

!
Частые ошибки

<ul><li>Считать, что при переливании всегда опустошается исходный сосуд.</li><li>Забывать ограничение вместимости принимающего сосуда.</li><li>Не записывать промежуточные состояния и терять одну команду.</li><li>Останавливать решение на нужном объёме, хотя условие требует пустого второго сосуда.</li><li>Путать направление переливания: \(A\to B\) и \(B\to A\) дают разные результаты.</li><li>Продолжать цикл после уже встречавшегося состояния.</li></ul>

Если задача сформулирована как программа для исполнителя Водолей, сначала проверьте допустимость каждой команды по описанию из страницы «Команды исполнителя Водолей», а затем отслеживайте состояние по правилам страницы «Состояние сосудов».

Самопроверка

Q
Быстрый тест по теме

Проверь себя

~ 2 мин4 вопроса
Вопрос 1 / 4
Вопрос 1 из 4 · команды
Состояние сосудов вместимостью 5 и 3 литра равно \((5,1)\). Какое состояние получится после переливания \(A\to B\)?
Главное за минуту

Главное

  • Состояние сосудов записывают как набор текущих объёмов, например \((x,y)\).
  • Переливание заканчивается, когда исходный сосуд пуст или принимающий сосуд заполнен.
  • Решение строят последовательной записью состояний после каждой команды.
  • Для проверки достижимости объёма используют делимость на \(\gcd\) вместимостей сосудов.
  • Повторившиеся состояния и невозможные ветви нужно отсекать.
  • Перед ответом проверьте не только нужный объём, но и все дополнительные условия задачи.