![算法训练营:海量图解+竞赛刷题(进阶篇)](https://wfqqreader-1252317822.image.myqcloud.com/cover/239/47379239/b_47379239.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
训练3 表演评分
题目描述(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/B221B0/26763902601483406/epubprivate/OEBPS/Images/40886-00-41-1.jpg?sign=1738954293-TGbEVM9SZH7UndxHqcb95mrcNyDDiaS5-0-7d03e508f83a98fbc11c5af06f862df0)
提示:此问题的输入数据非常大。对C++I/O,建议使用scanf和printf。内存限制可能不允许将所有内容都存储在内存中。
题解:本题数据量很大,不要存储所有数据,只需用两个队列分别存储最大的n1个数和最小的n2个数即可。
1. 算法设计
定义两个优先队列,q1最大值优先,存储最小的n2个数;q2最小值优先,存储最大的n1个数。用总和减去这两个优先队列的元素值,然后求平均数。
2. 算法实现
![](https://epubservercos.yuewen.com/B221B0/26763902601483406/epubprivate/OEBPS/Images/40886-00-41-2.jpg?sign=1738954293-qvBzNVUfy7YuGA9wA9GsWWHoxYmPL4ak-0-1a10103998d32de67a662d4057a67abf)