2016-11-16 10 views
-4

Я решил эту проблему с помощью hackerearth.com питона (v2)Xor логика питона

Постановка задачи: Xor is Mad

Мой код:

tests = int(raw_input()) 
for i in range(tests): 
x = int(raw_input()) 
c = 0 
b = x 
a = x-1 
while a > 0: 
    xor = a^b 
    summ = b + a 
    # print "XOr : ",xor 
    # print "Sum : ",summ,"\n--------" 
    if xor == summ: 
     c += 1 
     a -= 1 
    elif a > 0: 
     a -= 1 
print c 

но я раз превышая проблему для входов: вход № 5 до # 9

может кто-то решить эту проблему по-другому, чтобы управлять тестами, которые должны выполняться в течение 1 сек.

+0

Не могли бы вы дать нам некоторые из тестов? На каких входах ваш код медленнее? –

+0

Привет @PatrickHaugh, вы можете отправить этот ответ на хакер и проверить вход №5 на # 9. Фактически они предоставляют тестовые файлы, которые содержат линии 10K-100k. не могли бы вы потратить некоторое время на это. Спасибо –

ответ

1

Трюк должен признать, что вам не нужно проверять все a до x. Для a^x == a+x, затем a&x == 0. Таким образом, мы считаем количество нулей в битовой строке из x, а затем из ответа 2**count -1

test = int(input()) 
for _ in range(test): 
    x = int(input()) 
    print(2**bin(x)[2:].count('0') -1) 
+0

Большое спасибо Патрику за эту логику. –

 Смежные вопросы

  • Нет связанных вопросов^_^