poj 2833 优先队列的应用

题目有提示内存限制,所以自然会想到用优先队列来维护前k大和前k小。

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <queue>
 5 using namespace std;
 6
 7 typedef long long ll;
 8 priority_queue<int, vector<int>, greater<int> > s;
 9 priority_queue<int, vector<int>, less<int> > b;
10
11 int main ()
12 {
13     int n1, n2, n;
14     while ( scanf("%d%d%d", &n1, &n2, &n) != EOF )
15     {
16         if ( !n1 && !n2 && !n ) break;
17         ll ans = 0;
18         for ( int i = 0; i < n; i++ )
19         {
20             int tmp;
21             scanf("%d", &tmp);
22             ans += tmp;
23             if ( s.size() < n1 )
24             {
25                 s.push(tmp);
26             }
27             else
28             {
29                 if ( tmp > s.top() )
30                 {
31                     s.pop();
32                     s.push(tmp);
33                 }
34             }
35             if ( b.size() < n2 )
36             {
37                 b.push(tmp);
38             }
39             else
40             {
41                 if ( tmp < b.top() )
42                 {
43                     b.pop();
44                     b.push(tmp);
45                 }
46             }
47         }
48         while ( !s.empty() )
49         {
50             ans -= s.top();
51             s.pop();
52         }
53         while ( !b.empty() )
54         {
55             ans -= b.top();
56             b.pop();
57         }
58         double avg = ans * 1.0 / ( n - n1 - n2 );
59         printf("%.6f\n", avg);
60     }
61     return 0;
62 }
时间: 2024-10-18 06:58:50

poj 2833 优先队列的应用的相关文章

poj 2970 优先队列

先按di排序,(从小到大).然后依次完成合同,若发现第i个合同无法在截止日期前完成,便从之前已经完成的任务中选一个aj最大的合同,付钱来使得这个合同尽快完成. #include<cstring> #include<cstdio> #include<iostream> #include<queue> #include<algorithm> using namespace std; struct node { int q; int w; bool o

PKU 2833 优先队列

原题http://poj.org/problem?id=2833 The Average Time Limit: 6000MS   Memory Limit: 10000K Total Submissions: 9423   Accepted: 2938 Case Time Limit: 4000MS Description In a speech contest, when a contestant finishes his speech, the judges will then grade

POJ 1442 优先队列 模板

/* poj 1442 题意:给定M个数,每次可以插入序列一个数:再给N个数,表示在插入第几个数时输出一个数, 第一次输出序列中最小的,第二次输出序列中第二小的……以此类推,直到输出N个数. 优先队列的使用: 本题思路是建立一个小顶堆p和一个大顶堆q, q保存前k个小的数,且保证p的值都比q的大, 最后输出q的顶 */ #include <iostream> #include <cstdio> #include <algorithm> #include <queu

POJ: 2413 ——优先队列——结构体cmp函数一级排序

我要翻译题目!!! /* A group of cows grabbed a truck and ventured on an  expedition deep into the jungle. Being rather poor drivers, the cows unfortunately managed to run over a rock and puncture the truck's fuel tank. The truck now leaks one unit of fuel ev

poj 2833 The Average

题目链接:http://poj.org/problem?id=2833 思路: 由于数据量较大,超出存储范围,使用不能使用数组存储数据在进行排序.考虑维护一个最大堆与最小堆,依次读取数据,记录数据中的n1个最大数字与n2个最小数据,所有数据累计和减去堆中数据即可. 注:注意使用记录n2个最大数据要使用最小堆,因为每一个数据需要与该堆中最小值比较,同理,记录n1个最小数据要使用最大堆. 代码: #include <iostream> #include <queue> using na

poj 2431 优先队列,贪心

题意:从当前位置到目的地,给出初始油量和距离,给出一系列的加油站离终点的距离和可以加的油量,每走一个单位消耗一个单位油量,求要到达目的地最少要在几个加油站下车加油. 题解:既然是最少,那么尽可能在油消耗完的时候给加油,如果再走a米的路程中注定要加一次油,那么就选择这段路程油量最大的加油站下车 代码实现就是每经过一个加油站将这个加油站的油量存下来, 等到不得不下车加油的时候,就选择储存的这些数据中最大的那个(不一定是在油刚刚消耗完的时候,在那之前也行),并且选择完了以后将这个数据移出.直到到达目的

POJ -3253 优先队列 STL

Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 29658   Accepted: 9643 Description Farmer John wants to repair a small length of the fence around the pasture. He measures the fence and finds that he needs N (1 ≤ N ≤ 20,000)

poj 1511 优先队列优化dijkstra *

题意:两遍最短路 链接:点我 注意结果用long long 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 #include<map> 8 using namespace std; 9 #define MOD 1000000007 1

Moo University - Financial Aid (poj 2010 优先队列 或者 二分)

Language: Default Moo University - Financial Aid Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 5551   Accepted: 1663 Description Bessie noted that although humans have many universities they can attend, cows have none. To remedy this p