问题描述
我正在尝试解决此problem。首先,我创建一个列表,列出所有可能的16位数字bitset
。
我将输入列表x
的元素索引存储到bitset
(bitset[i]
在输入列表x
中包含i的索引)。显然,并非bitset
的所有元素都具有值。我将allset
分配给所有位均已设置的数字(此处为2 ** 16-1)。 ideal
是一个数字,考虑到所有数字均为16位,则在与给定数字进行异或运算时将给出最大异或。我们遍历所有可能的数字ideal^i
,其中我从0到allset
。显然,存在于输入数组x中且索引在给定范围内的第一个ideal^i
将使我们获得最大xor。这是上述方法的python3实现:
#!/bin/python3
import os
import sys
def xorKey(x,queries):
ans = []
bitset = [None]*(1 << 16)
for i in range(len(x)):
if bitset[x[i]]:
bitset[x[i]].append(i)
else:
bitset[x[i]] = [i]
allset = (1 << 16) - 1
for q in queries:
ideal = q[0]^allset
for i in range(1 << 16):
if inrange(bitset[i^ideal],q):
ans.append(allset^i)
break
return ans
def inrange(a,q):
if a:
p = b_search(a,q[1]-1)
if p < len(a) and a[p] < q[2]:
return True
return False
return False
def b_search(a,x):
l = 0
r = len(a)
while l != r:
m = l + (r-l)//2
if x > a[m]:
l = m + 1
else:
r = m
return r
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'],'w')
t = int(input())
for t_itr in range(t):
nq = input().split()
n = int(nq[0])
q = int(nq[1])
x = list(map(int,input().rstrip().split()))
queries = []
for _ in range(q):
queries.append(list(map(int,input().rstrip().split())))
result = xorKey(x,queries)
fptr.write('\n'.join(map(str,result)))
fptr.write('\n')
fptr.close()
它没有通过所有测试用例,因此肯定需要一些优化。任何建议都会被采纳。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)