Итак, я только что вернулся для ACM Programing Competition и сделал очень хорошо, но была одна проблема, которую не получила ни одна команда.
Проблема.
Начните с целого числа N0, которое больше 0. Пусть N1 - число единиц в двоичном представлении N0. Итак, если
N0 = 27
,N1 = 4
. Для всехi > 0
пусть Ni - число единиц в двоичном представленииNi-1
. Эта последовательность всегда будет сходиться к единице. Для любого начального числа N0 пусть K - минимальное значение я >= 0, для которого N1 = 1. Например, если N0 = 31, то N1 = 5, N2 = 2, N3 = 1, поэтому K = 3.Учитывая диапазон последовательных чисел и значение X, количество чисел в диапазоне имеет значение K, равное X?
Ввод
На входе будет несколько тестовых примеров. Каждый тестовый пример будет состоять из трех целых чисел в одной строке:LO HI X
ГдеLO
иHI
(1 <=LO
<=HI
<= 10 18) являются нижним и верхним пределами диапазона целых чисел иX
(0 <= =X
<= 10) является целевым значением для K. Вход заканчивается линией из трех 0s.Выход
Для каждого тестового примера выводится одно целое число, представляющее число целых чисел в диапазоне отLO
доHI
(включительно), которые имеют значение K, равное X на входе. Распечатайте каждый Integer в отдельной строке без пробелов. Не печатайте пустые строки между ответами.
Пример ввода
31 31 3
31 31 1
27 31 1
27 31 2
1023 1025 1
1023 1025 2
0 0 0
Пример вывода
1
0
0
3
1
1
Если вы, ребята, хотите, я могу включить наш ответ или нашу проблему, потому что найти небольшой диапазон легко, но я дам вам подсказку, прежде чем ваша программа должна запускаться за считанные секунды, а не минуты. У нас было успешное решение, но не эффективный алгоритм использования диапазона, аналогичного
48238 10^18 9
В любом случае удачи, и если сообщество понравилось, у нас было еще несколько проблем, которые мы не могли решить, это могут быть хорошие мозговые дразнилки для вас, ребята. Конкурс позволяет использовать Python, С++ или Java - все три приемлемы в ответе.
Итак, как подсказка, мой тренер сказал подумать о том, как двоичные числа учитываются, а не проверяют каждый бит. Я думаю, что это приближает нас.