您将获得一组S和Q查询。最初,S为空。在每个查询中:
您将得到一个正整数X。
您应该将X插入S。
对于此查询之前的每个y∈S,以使y≠X,还应将y⊕X插入S中(⊕表示XOR运算)。 然后,您应该找到两个值E和O:在二进制表示形式中,S的元素个数分别为偶数1和奇数1。
我尝试将问题分解为较小的子问题,但由于输入量较大且列表较大,因此似乎超过了时间。对代码的任何建议和进一步的优化都将非常有帮助。我已经使用了set,但是预期的输出与我的输出不同。在解决方案代码中出现任何错误的建议。
Lemma mutualexc: forall (sn1 sn2 bmax snmax:nat),
let g1 := group sn1 bmax snmax in
let g2 := group sn2 bmax snmax in
let list1 := f (fst(g1)) (snd(g1)) ((snd(g1)) - (fst(g1))) in
let list2 := f (fst(g2)) (snd(g2)) ((snd(g2)) - (fst(g2))) in
sn1 <> sn2 -> disjoint list1 list2.
intros. induction list1 as [|t l1] .
apply disjoint_nil_l. apply disjoint_cons_l.
unfold disjoint .
unfold disjoint.`
示例输入:
s=set()
def fun(n,q):
c=0
cc=0
s.add(n)
for k in range(len(list(s))):
if list(s)[k]!=n:
s.add((list(s)[k])^n)
for k in s:
if bin(k)[2::].count('1')%2==0:
c+=1
else:
cc+=1
print(c,cc)
for _ in range(int(input())):
q=int(input())
for j in range(q):
n=int(input())
fun(n,q)
示例输出:
1
3
4
2
7
答案 0 :(得分:0)
我在您的代码上看到的第一件事是S应该是一组数字。列表可以包含重复项,因此您需要使用sets
为了优化脚本,您可以从改进以二进制形式表示的数字中启用位数的计数方法开始。这种计数称为字符串的hamming weight。
在网络上搜索。例如,您有this article
答案 1 :(得分:0)
我认为您要在列表中插入重复值。修复它,您会很高兴。