Автор: | Методическая комиссия по информатике | Ограничение времени: | 2 сек | |
Входной файл: | input.txt | Ограничение памяти: | 64 Мб | |
Выходной файл: | output.txt | |||
Максимальный балл: | 50 |
Заданы три числа: a, b, c. Необходимо выяснить, существуют ли такие числа x и y, что:
Входной файл содержит целые числа a b c.
Если искомые числа существуют, вывести в первую строку выходного файла слово YES, а во вторую — числа x y, разделённые пробелом. В противном случае вывести слово NO.
1 < a, b, c < 109
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
2 |
|
|
Основная идея решения основана на переборе всех перестановок цифр числа a. Генерировать все перестановки можно простой рекурсивной процедурой.
Обозначим очередное полученное число через ap. Теперь, для того, чтобы найти число bp, которое необходимо получить перестановкой цифр числа b, достаточно вычесть из числа c число ap.
Для проверки возможности перестановки цифр числа b таким образом, чтобы получилось число bp, проверим на равенство мультимножества цифр указанных чисел. Это можно сделать, например, посчитав количество нулей, единиц, двоек, …, девяток в каждом из сравниваемых чисел.
Вычислительная сложность алгоритма: O(n!(m + n)), где m — количество цифр в записи числа a, а n — количество цифр в записи числа b.