以下是问题陈述:
给出两个整数:L和R, 找到给定的A xor B的最大值,L≤A≤B≤R
输入格式:
输入包含两行,L在第一行中。 R在第二行。
限制条件: 1≤L≤R≤1000
输出格式 问题陈述中提到的最大值。
来源: Maximising XOR
以上是一个独特的解决方案:
def maxXOR(L,R):
P = L^R
ret = 1
while(P): # this one takes (m+1) = O(logR) steps
ret <<= 1
P >>= 1
return (ret - 1)
print(maxXOR(int(input()),int(input())))
你能解释一下这个解决方案背后的直觉吗?
谢谢。
答案 0 :(得分:1)
有一种简单的方法可以解决O(1)
中的问题。
让我们开始吧:
L
和R
进行按位XOR并将其存储在变量xored
中。MSB
中的xored
设为MSB -----> LSB
,并将来自该1
的所有位设为L = 10111 --> (23)
R = 11100 --> (28)
_X___ <-- that's most significant differing bit
01111 <-- here's our final answer i.e. (15).
。下面的例子可以使事情变得清楚。
MSB
要设置从LSB
到2^n - 1
的所有位,请首先计算n = number of bits required to represent L^R
,其中L^R | (2^(n) - 1)
,然后执行import math
def main():
xored = int(input().strip()) ^ int(input().strip())
print("{}".format(xored | ((1 << (1 + int(math.log2(xored)))) - 1)))
if __name__ == "__main__":
main()
。
Python解决方案:
C
注意:您可以在C++
和 -<ResponseData>
<Type value="7" id="Level"/>
<Type value="67.80" id="Score"/>
</ResponseData>
here!中引用解决方案。