ccfcsp-2020122-期末最佳阈值-python

如题:


题目分析

1.首先无论是python还是c++,采用暴力对比的方法都只能过70%的用例,剩余的测试用例会超时。

2.可以采用字典dic来存储数据,其中每一个值dic[x]=[2,3,a,b],表示值为x的数据中,被评估的结果(result)为0的有2个,被评估为1的有3个。排序后通过统计继而可以得到a:以当前值为阈值,比该值小的满足条件的有a个(包括自身),b:以当前值为阈值,比改值大的满足条件的有b个。最后通过循环求得:dic[x][2]+dic[x][3]-dic[i][0]最大的即为所求阈值。

代码

dic={}
m=int(input())
for i in range(m):
    x,y=map(int,input().split())
    if x in dic:
        dic[x][y]+=1
    else:
        dic[x]=[0,0,0,0]
        dic[x][y]+=1
key=sorted(dic)

dic[key[1]][2]=dic[key[0]][0]
dic[key[-1]][3]=dic[key[-1]][1]
for i in range(2,len(key)):
    dic[key[i]][2]=dic[key[i]][0]+dic[key[i-1]][2]
for i in range(len(key)-2,-1,-1):
    dic[key[i]][3]=dic[key[i]][1]+dic[key[i+1]][3]

best_cor=0
best=0
for i in key:
    cor=dic[i][2]+dic[i][3]-dic[i][0]
    if cor>best_cor:
        best=i
        best_cor=cor
    elif cor==best_cor and i>best:
        best=i
print(best)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值