Ограничения: время – 200ms/500ms, память – 64MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (1)
Программист Петя сконструировал свою вычислительную машину. Она могла хранить в
памяти любое неотрицательное целое число. Также она могла выполнять несколько
элементарных арифметических операций (сложение, вычитание, умножение, деление),
в которых в качестве обоих аргументов выступало число, хранящееся в памяти машины.
Результат выполнения операции записывался в память машины вместо имеющегося там
числа. Таким образом, операция "+" удваивает хранящееся в памяти число,
операция "-" обнуляет это число, операция "*" возводит это число в
квадрат, операция "/" превращает это число в 1.
Однажды Петя задумался: а за какое наименьшее количество арифметических операций
он может получить с помощью своей машины число `B`, если изначально в памяти машины
хранилось число `A`? Помогите Пете разработать программу, отвечающую на поставленный
вопрос.
Ввод
В первой строке входного файла записаны два целых числа `A` и `B`, разделенные одним пробелом.
(`1\ ≤\ A,\ B\ ≤\ 1\ 000\ 000\ 000`).
Вывод
В первой строке выходного файла выведите последовательность арифметических операций,
позволяющую получить число `B` из числа `A` (см. примеры). Последовательность должна содержать
наименьшее возможное количество операций. В случае, если существует несколько таких
последовательностей одинаковой длины, нужно выдать лексикографически минимальную в соответствии
с ASCII кодами символов арифметических операций. Арифметические операции (+, -, *, /) по возрастанию
ASCII кодов идут в следующем порядке: *, +, -, /.
В случае, если невозможно получить число `B` из числа `A`, необходимо вывести строку ":-(" (без кавычек).
Примечания:
- последовательность операций может быть пустой, в таком случае вывод должен содержать переход на новую строку (см. примеры);
- делить на 0 нельзя.
[
Источник задачи: www.topcoder.com