CSP认证 202012-2 期末预测之最佳阈值
题目
思路
利用前缀和来求,分别求出大于等于它的预测为1的个数以及小于它的预测为0的个数,将其相加即为正确的预测个数。再倒序查找到最大的那个值。
代码
n = int(input())
pre = {}
data = []
k = 0
for i in range (n):
y,result = map(int,input().split())
if y not in pre:
pre[y]=[0,0]
if result==0:
pre[y][0] += 1
else:
pre[y][1] += 1
data += [y]
k += 1
else:
if result==0:
pre[y][0] += 1
else:
pre[y][1] += 1
data.sort()
#大于、等于的预测为1的,倒序前缀求和
num1 = []
L = 0
for i in range (k-1,-1,-1):
L += pre[data[i]][1]
num1 += [L]
num1 = num1[::-1]
#小于的预测为0的,顺序前缀求和
num2 = []
S = 0
for i in range (k):
S += pre[data[i]][0]
temp = (-1)*pre[data[i]][0]
out = S + temp
num2 += [out]
for i in range (k):
num1[i] += num2[i]
Max = max(num1)
for i in range (k-1,-1,-1):
if Max==num1[i]:
print(data[i])
break