思路: 需要将小伙伴的army数xi 先转换为二进制数convert——binary(list)(小函数)
若转换为二进制后的数字个数(list的长度)<n的话,那么在该数前方+相差个0
并与fedor的二进制(list)相比较,如果不一样的个数<= k,return True
在主代码里计算返回True的次数(朋友的个数)
def convert_binary(num):
result = []
if num <= 1:
result.append(num)
else:
while True:
consult = num / 2
reminder = num % 2
result.append(reminder)
if consult == 1:
result.append(consult)
break
num = consult
return result[::-1]
def add_zero(num, n):
binary_ya = convert_binary(num)
if len(binary_ya) < n:
binary_ya = (n-len(binary_ya))*[0] + binary_ya
return binary_ya
def friend(person, fedor, k):
friend = 0
for i in range(len(person)):
if person[i] != fedor[i]:
friend += 1
if friend <= k:
return True
return False
n, m, k = map(int,raw_input().split())
xiaohuoban = []
for i in range(m):
xiaohuoban.append(add_zero(int(raw_input()), n))
fedor = add_zero(int(raw_input()), n)
result = 0
for i in range(len(xiaohuoban)):
if friend(xiaohuoban[i],fedor,k) == True:
result += 1
print result