Xor логика в питоне

Я решил эту проблему с hackerearth.com с помощью Python(v2)

Постановка проблемы: 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сек.

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)
Другие вопросы по тегам