Олимпиадная информатика - 2015

Разбор и решение задач муниципального уровня

Задача « Две дроби »

Однажды мудрая Сова подарила ослику Иа-Иа на его день рождения скромный, но очень по- лезный вычислительный прибор, который умеет выполнять три операции:
(A) прибавить единицу к данному числу;
(B) вычесть единицу из данного числа;
(C) заменить ненулевое число на обратное к нему.

К сожалению, на клавиатуре прибора отсутствуют многие клавиши, поэтому некоторые числа приходится получать из других чисел с помощью указанных трёх операций. Представьте, что ослику Иа-Иа из дроби a/b нужно получить дробь c/d. Как ему это сделать, используя только операции A, B и C?

Формат входного файла fractions.in Входной файл: В первой строке записаны через пробел два числа a и b - числитель и знаменатель несократимой дроби a/b, во второй строке также записаны через пробел два числа c и d - числитель и знаменатель несократимой дроби c/d. Все числа a, b, c, d целые, 1 <a,b,c,d <1000000. Дроби a/b и c/d различны.

Формат выходного файла fractions.out Выходной файл: В первой строке запишите одно число n - количество необходимых операций, которое не должно превышать 2 000 001. Во второй строке укажите последовательность из n символов A, B и C латин- ского алфавита - операций, с помощью которых из числа a/b можно получить c/d. Если решений несколько, выведите любое из них. Если из дроби a/b получить дробь c/d невозможно, выведите -1.

INPUT.TXT
3 2
3 1
OUTPUT.TXT
3
BCA
INPUT.TXT
3 2
2 3
OUTPUT.TXT
1
C

посмотреть решение здесь

Разбор задачи №1 "Две дроби"
предложено Песковым Аркадием Геннадьевичем, МОУ «Сюкеевская средняя общеобразовательная школа»
Камско-Устьинского муниципального района РТ

Сколько всё-таки можно придумать задач, в решении которых применяется алгоритм Евклида для нахождения НОД двух чисел! Ведь в условии по сути предлагается выполнять именно шаги алгоритма Евклида: при вычитании 1 из неправильной дроби замена большего числа на разность этих чисел и обмен значений при нахождении обратной дроби.

Третье действие - прибавление 1 - является обратным к первому. К результате применения алгоритма Евклида оба числа становятся равными (дробь равна 1). Запомним сколько и каких действий мы выполнили, чтобы получить из каждой дроби 1.

Для второй дроби перепишем действия в обратном порядке, заменяя их на обратные (вычитание 1 на прибавление 1, обмен значениями обратен сам себе - замена не требуется). Алгоритм решения задачи имеет вид пока первая дробь неравна 1 делаем нц если дробь неправильная-отнимаем 1 , иначе меняем местами числитель и знаменатель, ведем счетчик проведенных действий, приписываем обозначение действия в КОНЦЕ строки-ответа кц тоже для второй строки только приписываем обозначение ОБРАТНОГО действия в НАЧАЛЕ строки.

Выводим общее количество операций и объединение строк-ответов. Даже при самых больших значениях (1000000/1 и 1000000/1) укладываемся в ограничение на количество действий (2000001). В задаче не требуется минимизировать число действий.