poj 2833 The Average
2013-12-22 00:00
344 查看
摘要: 堆,水题
[Submit] [Go Back] [Status] [Discuss]
The Average
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 greatest n1 ones and the least n2 ones, and compute the average of the rest. Input The input consists of several test cases. Each test case consists two lines. The first line contains three integers n1, n2 and n (1 ≤ n1, n2 ≤ 10, n1 + n2 < n ≤ 5,000,000) separate by a single space. The second line contains n positive integers ai (1 ≤ ai ≤ 108 for all i s.t. 1 ≤ i ≤ n) separated by a single space. The last test case is followed by three zeroes. Output For each test case, output the average rounded to six digits after decimal point in a separate line. Sample Input 1 2 5 1 2 3 4 5 4 2 10 2121187 902 485 531 843 582 652 926 220 155 0 0 0Sample Output 3.500000 562.500000Hint 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. Source POJ Monthly--2006.05.28, zby03 |
/*============================================================================= # FileName: 2833.cpp # Desc: # Author: zhuting # Email: cnjs.zhuting@gmail.com # HomePage: my.oschina.net/locusxt # Version: 0.0.1 # CreatTime: 2013-12-22 18:12:25 # LastChange: 2013-12-22 18:12:25 # History: =============================================================================*/ #include <cstdio> #include <cstdlib> #include <string> #include <cstring> #include <algorithm> #include <queue> using namespace std; int main() { int n1 = 0, n2 = 0, n = 0; int tmp = 0; while (true) { long long ans = 0; int pqn1 = 0, pqn2 = 0; priority_queue<int, vector<int>, greater<int> > pq1; priority_queue<int, vector<int>, less<int> > pq2; scanf("%d%d%d", &n1, &n2, &n); if (n1 == 0 && n2 == 0 && n == 0) break; for (int i = 0 ; i < n; ++i) { scanf("%d", &tmp); ans += tmp; if (pqn1 < n1) { pq1.push(tmp); ++pqn1; } else { if (tmp > pq1.top()) { pq1.pop(); pq1.push(tmp); } } if (pqn2 < n2) { pq2.push(tmp); ++pqn2; } else { if (tmp < pq2.top()) { pq2.pop(); pq2.push(tmp); } } } for (int i = 0 ; i < n1; ++i) { ans -= pq1.top(); pq1.pop(); } for (int i = 0 ; i < n2; ++i) { ans -= pq2.top(); pq2.pop(); } printf("%.6lf\n", ((double)ans) / (double)(n - n1 - n2)); } return 0; }
相关文章推荐
- 2632 Crashing Robots的解决方法
- 1573 Robot Motion (简单题)
- poj 2485 Highways
- poj 1511 Invitation Cards
- poj1042
- poj1080
- poj1088
- poj 3249 Test for Job 最长路
- 状态压缩DP poj 2817 WordStack 入门题
- POJ 1979
- 线段树的运用 以及poj上的经典题目
- POJ 2801 填词游戏
- POJ1003解题方案
- POJ2418解题方案
- POJ 1003 java
- POJ 1625(ac自动机+dp+高精度)
- POJ2186 Popular Cows Tarjan 链接表 pascal解题报告
- POJ2553 The Bottom of a Graph Tarjan 矩阵 pascal 解题报告
- POJ3180 The Cow Prom Tarjan 链接表 pascal 解题报告
- POJ DP题目列表