![算法训练营:提高篇(全彩版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/130/52921130/b_52921130.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
训练2 表演评分
题目描述(POJ2833):在演讲比赛中,评委对参赛者的演讲进行评分。评分方法:给定n个正整数评分,删除最大的n1个评分和最小的n2个评分,将其余评分的平均数作为参赛者的最终成绩。请给出参赛者的最终成绩。
输入:输入几个测试用例。每个测试用例都包含两行:第1行为3个整数n1、n2和n(1≤n1,n2≤10,n1+n2<n≤5×106);第2行为n个正整数ai(1≤ai≤108,1≤i≤n)。在最后一个测试用例后面跟3个0。
输出:对于每个测试用例,都单行输出参赛者的最终成绩,保留小数点后6位。
![](https://epubservercos.yuewen.com/AE123A/31457654304331706/epubprivate/OEBPS/Images/txt001_14.jpg?sign=1739154206-kLo7ukONkcLE9vC15FvxOz2dvD3f3PcC-0-ca9039e66d928566b074b88b2b94ed7c)
提示:本题的数据量很大,可能超出计算机的内存限制。对C++ I/O,建议用scanf和printf。
题解:不要存储所有数据,只用两个优先队列分别存储最大的n1个数和最小的n2个数即可。
1.算法设计
定义两个优先队列q1和q2:q1最大值优先,存储最小的n2个数;q2最小值优先,存储最大的n1个数。首先将评分总和减去这两个优先队列中的元素值,然后求平均数。
2.算法实现
![](https://epubservercos.yuewen.com/AE123A/31457654304331706/epubprivate/OEBPS/Images/txt001_15.jpg?sign=1739154206-UbWAXb3E8gTswcIAPvqTYV0NThUSCC9F-0-5d48b0e52627d6584bb4434632559590)