给出一个初始为S的S和Q查询集 以下是一些需要执行的查询: 您得到一个正整数X 。 您应该插入X 进入S 。 对于每个y∈S 在执行此查询以使y≠X之前,还应将y⊕X插入S(⊕ 表示XOR操作)。 然后,您应该找到两个值E 和O:二进制表示形式中S的偶数个数为1-s且奇数个数为1s的元素数。
我尝试过首先解决使用列表的问题,但是花费的时间超过了所需的时间,然后我切换到设置列表,但是在计算元素内的XOR时出现了某种错误。 我得到了两个测试用例的确切答案,但最后一个用例失败了,结果有些不正确。 关于我要去哪里的任何建议以及如何改进此代码以获取正确的输出..!
s=set()
num_to_bits=[0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4]
def countSetBitsRec(num):
nibble = 0;
if(0 == num):
return num_to_bits[0]
nibble = num & 0xf
return num_to_bits[nibble] + countSetBitsRec(num >> 4);
#def xor(x, y):
# return ((x | y) & (~x | ~y))
for _ in range(int(input())):
#q=int(input())
ans=[]
for j in range(int(input())):
n=int(input())
c=0
cc=0
s.add(n)
for k in range(len(s)):
if [*s][k]!=n and ([*s][k] not in ans):
s.add([*s][k]^n)
ans.append([*s][k])
#ans.append(n)
#s.add([*s][k]^n)
#print(s)
#if countSetBitsRec(s[k])%2==0:
#c+=1
#else:
# cc+=1
#if countSetBitsRec(xor(s[k],n))%2==0:
# c+=1
# cc+=1
#print("ans ",ans)
print(s)
for k in s:
if countSetBitsRec(k)%2==0:
c+=1
#elif countSetBitsRec(xor(k,n))%3==0:
else:
cc+=1
print(c,cc)
预期输入:
1
3
4
2
7
预期输出:
0 1
1 2
3 4
对于前两个测试用例,我已经很清楚了,但是对于最后一个测试用例,我很清楚。