(优先队列)The Average
来源:互联网 发布:人力资源数据分析模型 编辑:程序博客网 时间:2024/06/06 11:45
In a speech contest, when a contestant finishes his speech, the judges will then grade his performance. The staff remove the highest grade and the lowest grade and compute the average of the rest as the contestant’s final grade. This is an easy problem because usually there are only several judges.
Let’s consider a generalized form of the problem above. Given n positive integers, remove the greatestn1 ones and the leastn2 ones, and compute the average of the rest.
The input consists of several test cases. Each test case consists two lines. The first line contains three integersn1,n2 and n (1 ≤ n1,n2 ≤ 10,n1 + n2 < n ≤ 5,000,000) separate by a single space. The second line containsn positive integersai (1 ≤ ai ≤ 108 for alli s.t. 1 ≤i ≤ n) separated by a single space. The last test case is followed by three zeroes.
For each test case, output the average rounded to six digits after decimal point in a separate line.
1 2 51 2 3 4 54 2 102121187 902 485 531 843 582 652 926 220 1550 0 0
3.500000562.500000
This problem has very large input data. scanf and printf are recommended for C++ I/O.
The memory limit might not allow you to store everything in the memory.
#include<iostream>#include<queue>#include<cstdio>#include<vector>using namespace std;priority_queue<int,vector<int>,greater<int> >qmin;priority_queue<int,vector<int>,less<int> >qmax;int main(){ int a,b,n; while(scanf("%d%d%d",&a,&b,&n)&&n) { int c; int maxsize=0,minsize=0; long long sum=0; for(int i=0; i<n; ++i) { scanf("%d",&c); sum+=(long long )c; if(maxsize<a) { qmin.push(c); ++maxsize; } else { if(c>qmin.top()) { qmin.pop(); qmin.push(c); } } if(minsize<b) { qmax.push(c); ++minsize; } else { if(c<qmax.top()) { qmax.pop(); qmax.push(c); } } } int del=0; while(!qmin.empty()) { del+=qmin.top(); qmin.pop(); } while(!qmax.empty()) { del+=qmax.top(); qmax.pop(); } printf("%f\n",(1.0 * sum - (long long)del) / (1.0 * (n- a - b))); }}
- (优先队列)The Average
- POJ 2833 The Average(堆 优先队列)
- POJ2833 The Average(优先队列/堆排序)
- poj -- 2833 The Average(优先队列或堆或直接模拟)
- The kth great number(优先队列)
- The kth great number(优先队列)
- The kth great number(优先队列)
- HDOJ 4006 The kth great number(优先队列)
- HDU 4006 The kth great number(优先队列)
- HDU 4006 The kth great number(优先队列)
- hdu 4006 The kth great number(优先队列)
- HDU 4198 Quick out of the Harbour(优先队列)
- spoj 417 The lazy programmer(贪心&优先队列)
- HDU-#4006 The kth great number(优先队列)
- hdu 1195 Open the Lock (bfs+优先队列)
- UVA10588 - Queuing at the doctors(优先队列)
- 【POJ 2970】The lazy programmer(优先队列+贪心)
- POJ 2227 -- The Wedding Juicer(bfs+优先队列)
- 数据结构学习笔记(二)
- QTableWidget的使用
- Android知识点总结
- 面向对象--单一职责原则和开闭原则学习(简易ImageLoader)
- 常见的几种矩阵分解方式
- (优先队列)The Average
- FLV文件格式分析
- Java实现网络爬虫001-抓取网页
- JDBC
- 欢迎使用CSDN-markdown编辑器
- Linux文件层级标准
- 一个菜鸟的算法导论学习笔记【Introsuction&Chapter 1】
- 重写
- 小项目第四天