错误答案python3.6

时间:2019-07-06 08:32:54

标签: python python-3.x

  

您将获得一组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

2 个答案:

答案 0 :(得分:0)

我在您的代码上看到的第一件事是S应该是一组数字。列表可以包含重复项,因此您需要使用sets

为了优化脚本,您可以从改进以二进制形式表示的数字中启用位数的计数方法开始。这种计数称为字符串的hamming weight

在网络上搜索。例如,您有this article

答案 1 :(得分:0)

我认为您要在列表中插入重复值。修复它,您会很高兴。

解决方案和参考:-https://whitefox-89ea6.firebaseapp.com/