По заданному дереву найти произведение двух значений в поддереве с корнем в конкретном узле так, чтобы произведение имело минимальное количество нулей? - PullRequest
3 голосов
/ 16 мая 2019

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

Я подумал о том, чтобы сохранить кратные 2 и 5 в каждом узле и вычислить минимальное количество нулей для каждого узла снизу вверх.

1 Ответ

4 голосов
/ 16 мая 2019

Интересная проблема, и ваша интуиция искать кратные два и пять очень правильна!Количество конечных нулей равно меньшему из двух значений.Так, например, число конечных нулей в 124000 равно трем, потому что 124000 = 2^5 * 5^3 * 31, из этого мы берем 2^5 и 5^3, и min(5, 3) = 3.

Таким образом, проблема можетможно переформулировать как (я назову это P10 для дальнейшего использования):

P10:

Найдите минимальную кратность 2 или 5 в продуктеиз любых двух чисел в любых двух узлах в поддереве с корнем в данном узле.


Я подготовил пример с десятью числами:

an example with ten numbers

Запишем числа в их факторизованной форме:

numbers in their factorized form

Хорошо!Мы обработали проблему в более работоспособную форму, теперь мы разберем ее на что-то более простое.


Во-первых, давайте сосредоточимся на аналогичной, упрощенной проблеме, без учета пятерок:

P2:

Найдите минимальную кратность 2 в произведении любых двух чисел в любых двух узлах в поддереве, укорененном в данном узле.

Теперь мызаботятся только о двойках, поэтому мы можем удалить все остальные факторы с картинки:

only twos

В этом дереве на каждом узле мы напишемдва младших числа из поддерева узла, идущие снизу вверх (как вы предложили!).При рассмотрении узла у нас уже будут два наименьших числа, определенных для всех его дочерних элементов, поэтому достаточно перебрать ближайшие дочерние элементы, чтобы найти два наименьших числа для узла:

two lowest numbers on every node

Упрощенная задача решена!Просто умножьте числа в узле и верните экспоненту:

solution to the simplified problem


Теперь вышеприведенное на самом деле очень близко к решению реального вопроса ( P10 ).Повторите упрощенную версию с пятью вместо двух:

P5:

Найдите минимальную кратность 5 в произведении любых двух чисел в любых двух узлах в поддереве с корнем вданный узел.

Тогда для любого узла v решение для P10 равно P10 (v) = min (P2 (v),Р5 (v)) * * тысяча восемьдесят один.


Ресурсы:

...