簡體   English   中英

錯誤答案python3.6

[英]Wrong Answer python3.6

您將獲得一組S和Q查詢。 最初,S為空。 在每個查詢中:

您會得到一個正整數X。
您應該將X插入S。
對於此查詢之前的每個y∈S,以使y≠X,還應將y⊕X插入S中(⊕表示XOR運算)。 然后,您應該找到兩個值E和O:在二進制表示形式中,S的元素個數分別為偶數1和奇數1。

我曾嘗試將問題分解為較小的子問題,但由於輸入量較大且列表較大,因此似乎已經超過了時間。 對代碼的任何建議和進一步的優化都將非常有幫助。我已經使用了set,​​但是預期的輸出與我的輸出不同。 在解決方案代碼中我出了錯的任何建議。

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 1
1 2
3 4

我在您的代碼上看到的第一件事是S應該是一組數字。 列表可以有重復項,因此您需要使用集合

為了優化腳本,您可以從改進以二進制形式表示的數字中啟用位數的計數方法開始。 這種計數稱為弦的漢明重量

在網絡上搜索。 例如你有這篇文章

我認為您是在列表中插入重復值。 修復它,您會很高興。

解決方案和參考: -https : //whitefox-89ea6.firebaseapp.com/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM