Я второй день в ступоре.
Из заданного range надо вывести то число, которое, будучи в троичной системе счисления, будет стоять первым в лексикографическом (алфавитном) порядке.
Самое страшное здесь то, что 1 <= A <= B <= 10**15 и должно сработать не более, чем за 2 сек.
Для начала я попробовал методом напролом: range, перевод каждого в троичную, сортировка, вывод первого. Естественно, уже на числах 100500 все повисает.
Потом начал думать и по результатам думания в любую сторону надо как минимум вычислять log c основанием 3 от каждого значения rnage.
Попробовал для начала это (вычисляет первую цифру каждого числа в троичной):
import math
(s, e) = raw_input ().split ()
for r in range (int(s), int(e)+1):
d = 3**int (math.log (r, 3))
nk = 1 + int ((r - d)/d)
Капитан утверждает, что повисать тут нечему, кроме как log'у. Но, fuck, я с ним спорю, откуда тогда MemoryError то?
Да и еще бабушка на двое сказала, что сие будет работать быстрее, чем классическое вычисление числа в троичной:
while r>1:
p = str (r%3) + p
r = r/3
if r == 0: return p
elif r < 1: return p + str (r)
else: return "1"+p
p. s.
Это задача B вот отсюда.
p. p. s.
Да знаю я, что я быдлокодер.