Самый быстрый способ решить любую программу python, содержащую побитовый оператор - PullRequest
0 голосов
/ 03 мая 2020

У меня есть программа, в которой мне нужно найти максимальное значение выражения.
Выражение:

result=(x&z)*(y&z)

, в котором значение z находится в диапазоне [l, r ].
Я написал программу, которая является абсолютно правильной.

# cook your dish here
t=int(input())

for i in range(t):
    x,y,l,r=map(int,input().split())
    L=[]
    I=[]
    for i in range(l,r+1):
        r=(x&i)*(y&i)
        L.append(r)
        I.append(i)
    R=max(L)
    i=L.index(R)
    print(L)
    print(I[i])

Я хочу более быстрый способ сделать это

1 Ответ

1 голос
/ 03 мая 2020

Ваш result будет максимальным, когда произведение имеет само число x*y, так как A&B не может превышать min(A,B), Каким бы ни был диапазон l,r+1. в этом случае x|y даст число, с которым выполнение AND с x или y вернет тот же номер

...