Международная олимпиада АСМ по программированию
(четвертьфинал) 2007
Задача H
Вода
Входные данные читать из файла WATER.IN в текущем каталоге. Выходные данные писать в стандартный поток вывода (на дисплей). Исходный текст программы направлять на решение в файле WATER.CPP или WATER.DPR or WATER.JAVA
Ограничение по времени 5 секунд
Ограничение по памяти 64 Мбайта
Имеется три ведра, ёмкость которых известны и не равны. Самое большое ведро полное, остальные пусты. Требуется добиться, чтобы в самом большом ведре был заданный объем воды. За один шаг вода переливается из одного ведра в другое до тех пор, пока либо не закончится вода в ведре-источнике, либо не наполнится доверху вода в ведре-получателе.
Школьник Василий, чтобы занять себя, пытается решать эту задачу с разными входными данными, но не всегда находит решение. И даже если решение найдено, он хочет знать, является ли найденное решение оптимальным, а именно, используется ли минимальное количество шагов. Требуется написать программу, которая поможет Василию проверить его решение.
Входные данные:
Каждый тест приведён в отдельной строке, и содержит 4 натуральных числа, ёмкости вёдер b1, b2, b3 (1000 > b1 > b2 > b3 > 0), и требуемое количество воды в первом ведре t (b1 > t > 0). Признак окончания тестов – строка с данными b1 = b2 = b3 = t = 0, и этот тест не следует решать.
Пример входных данных:
10 8 4 4
10 8 4 5
0 0 0 0
Выходные данные:
Для каждого теста вывести либо минимальное количество переливаний, либо если задача не имеет решения, то слово IMPOSSIBLE (заглавными буквами).
Пример выходных данных:
3
IMPOSSIBLE