import math def calE(num0, num1): p0 = num0 / (num0 + num1) p1 = 1 - p0 if p0 == 1 or p1 == 1: return 0 return -(p0 math.log2(p0) + p1 math.log2(p1)) if name == "main": N = int(input()) arr = [] for i in range(N): arr.append(list(map(int, input().split(',')))) E0 = 0 E1 = 0 key_dic = {} sum_0 = 0 sum_1 = 0 for i in arr: if key_dic.get(i[0], None) is None: if i[1] == 1: key_dic[i[0]] = [0, 1] sum_1 += 1 else: key_dic[i[0]] = [1, 0] sum_0 += 1 else: if i[1] == 1: key_dic[i[0]][1] += 1 sum_1 += 1 else: key_dic[i[0]][0] += 1 sum_0 += 1 E0 = calE(sum_0, sum_1) for k, v in key_dic.items(): E1 += calE(v[0], v[1]) print(round(E0-E1, 2)) 大神能帮我看一下为啥我这个一直是0 。。。我仔细看了下你的代码,似乎我们的思路是一样的?(为什么牛客网上排版会这样。。。)
点赞 评论

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务