标签:阈值 ccfcsp202012 python res ans 个数 dic range ans1
文章目录
一、思路
1数据载入
用列表和字典装数据,列表装所有不重复的y值,字典形式如{y:[m,n]},m表示0的个数,n表示1的个数。
2.计算预测正确的次数
分为两个部分,一个部分是求比它小的预测正确的次数,另外一个部分是求大于等于它的预测正确的次数。其中求比它小的预测正确实质上就是比它小的数的0的个数,求大于等于它的预测正确实质上就是大于等于它的数的1的个数,分别利用前缀和来求。两部分求完后相加得到每个数的预测正确的次数。
3.输出答案
因为预测次数最大的数可能不止一个,所以倒序遍历输出这个数。
二、源代码
m = int(input())
dic = {} #装y和result
res = [] #装不重复的y
k = 0
for i in range(m):
y,result = map(int,input().split())
if y not in dic:
dic[y] = [0,0]
if result == 0:
dic[y][0] += 1
else:
dic[y][1] += 1
res.append(y)
k += 1
else:
if result == 0:
dic[y][0] += 1
else:
dic[y][1] += 1
res.sort()
order = 0
ans = [0] #装比这个数小的数的0的个数
#利用前缀和顺序求
for i in range(1,k):
order += dic[res[i-1]][0]
ans.append(order)
order1 = 0
ans1 = [] #装比这个数大的数的1的个数
#利用前缀和倒序求
for j in range(k-1,-1,-1):
order1 += dic[res[j]][1]
ans1.append(order1)
ans1 = ans1[::-1]
#统计预测正确的个数
for i in range(k):
ans[i] += ans1[i]
max1 = max(ans)
for i in range(k-1,-1,-1):
if ans[i] == max1:
print(res[i])
break
总结
某学渣的悲惨经历,期间看过别人的C++、Java解答,然而C++里面各种STL里面的容器不熟悉,Java没学过看不懂,并且没有搜到python的解答就很伤。于是在图书馆闭馆前的几分钟终于自己想出来了,就是一个前缀和来降低时间复杂度。
标签:阈值,ccfcsp202012,python,res,ans,个数,dic,range,ans1 来源: https://blog.csdn.net/weixin_45968555/article/details/112074483
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。