python中不可分的子集

Diw*_*RMA 0 python

我给了一个n个整数的集合S,并且必须打印S的最大子集S'的大小,其中S'中任何2个数字的总和不能被k整除.

输入格式

第一行包含2个以空格分隔的整数,分别为n和k.第二行包含n个以空格分隔的整数,用于描述集合的唯一值.

我的代码:

import sys


n,k = raw_input().strip().split(' ')
n,k = [int(n),int(k)]
a = map(int,raw_input().strip().split(' '))
count = 0


for i in range(len(a)):
    for j in range(len(a)):
        if (a[i]+a[j])%k != 0:
            count = count+1

print count
Run Code Online (Sandbox Code Playgroud)

输入:

4 3
1 7 2 4
Run Code Online (Sandbox Code Playgroud)

预期产出:

3
Run Code Online (Sandbox Code Playgroud)

我的输出:

10
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?任何人?

pla*_*etp 16

您可以O(n)使用以下方法及时解决:

L = [0]*k

for x in a: 
    L[x % k] += 1
res = 0
for i in range(k//2+1):
    if i == 0 or k == i*2:
        res += bool(L[i])
    else:
        res += max(L[i], L[k-i])

print(res)
Run Code Online (Sandbox Code Playgroud)

  • 如果`L [i]`是"真",则增加`res`(非零) (2认同)