题目链接:http://poj.org/problem?id=2833

思路分析:由于数据量较大,超出存储范围,使用不能使用数组存储数据在进行排序。考虑维护一个最大堆与最小堆,依次读取数据,

记录数据中的n1个最大数字与n2个最小数据,所有数据累计和减去堆中数据即可。注意使用记录n2个最大数据要使用最小堆,因为每

一个数据需要与该堆中最小值比较,同理,记录n1个最小数据要使用最大堆。

代码如下:

#include <iostream>
#include <queue>
using namespace std; struct cmp
{
bool operator()( const int a, const int b ) { return a > b; }
}; priority_queue<int>MaxHeap;
priority_queue<int, vector<int>, cmp >MinHeap;
int main()
{
int n1, n2, n;
double Sum = , Ave; while ( scanf( "%d %d %d", &n1, &n2, &n ) != EOF )
{
int Tmp, CountMin, CountMax; Sum = CountMin = CountMax = ;
if ( n1 == && n2 == && n == )
break; for ( int i = ; i < n; ++i )
{
scanf( "%d", &Tmp );
Sum += Tmp; if ( CountMin < n1 )
{
CountMin++;
MinHeap.push( Tmp );
}
else
if ( Tmp > MinHeap.top() )
{
MinHeap.pop();
MinHeap.push( Tmp );
} if ( CountMax < n2 )
{
CountMax++;
MaxHeap.push( Tmp );
}
else
if ( Tmp < MaxHeap.top() )
{
MaxHeap.pop();
MaxHeap.push( Tmp );
}
} while ( !MaxHeap.empty() )
{
int Tmp = MaxHeap.top();
MaxHeap.pop();
Sum -= Tmp;
} while ( !MinHeap.empty() )
{
int Tmp = MinHeap.top();
MinHeap.pop();
Sum -= Tmp;
} Ave = Sum / ( n - n1 - n2 );
printf( "%.6f\n", Ave );
} return ;
}

poj 2833 The Average(堆)的更多相关文章

  1. POJ 2833 The Average(优先队列)

    原题目网址:http://poj.org/problem?id=2833 本题中文翻译: 描述 在演讲比赛中,当选手完成演讲时,评委将对他的演出进行评分. 工作人员删除最高成绩和最低成绩,并计算其余成 ...

  2. POJ 2502 - Subway Dijkstra堆优化试水

    做这道题的动机就是想练习一下堆的应用,顺便补一下好久没看的图论算法. Dijkstra算法概述 //从0出发的单源最短路 dis[][] = {INF} ReadMap(dis); for i = 0 ...

  3. POJ 2442 Sequence【堆】

    题目链接:http://poj.org/problem?id=2442 题目大意:给出一个m*n的矩阵,从每一行中取出一个数相加.能得到n^m个不同的结果.要求输出当中前n项. 建立一个以n元数组为底 ...

  4. 区间DP与贪心算法的联系(uav Cutting Sticks &amp;&amp; poj Fence Repair(堆的手工实现))

    由于,这两题有着似乎一样的解法所以将其放在一起总结比較,以达到更好的区分二者的差别所在. 一.区间DP uva的Cutting Sticks是一道典型的模板题. 题目描写叙述: 有一根长度为l的木棍, ...

  5. [wikioi 1307][poj 2054]欧少堆(乱搞)

    题目:http://www.wikioi.com/problem/1307/ 题意:给你一个树,上面有n个节点,每个节点都有一个价值p,求一个n个节点的排列顺序,是的Σi*p[i]最小(要求父节点一定 ...

  6. POJ 1442 Black Box 堆

    题目: http://poj.org/problem?id=1442 开始用二叉排序树写的,TLE了,改成优先队列,过了.. 两个版本都贴一下吧,赚稿费.. #include <stdio.h& ...

  7. [ACM] POJ 1442 Black Box (堆,优先队列)

    Black Box Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7099   Accepted: 2888 Descrip ...

  8. POJ 2350 Above Average

    Description It is said that 90% of frosh expect to be above average in their class. You are to provi ...

  9. Running Median POJ - 3784 (对顶堆/优先队列 | 链表)

    For this problem, you will write a program that reads in a sequence of 32-bit signed integers. After ...

随机推荐

  1. 手把手教你在openshift上搭建wordpress博客(二)

    相同公布于:http://www.longgaming.com/archives/128 推荐前往阅读 这一篇文章主要介绍一些经常使用插件的使用和配置. 下面是我个人安装的一些插件.大家能够依据须要自 ...

  2. HDU2546:饭卡(01背包)

    HDU2546:饭卡 http://acm.hdu.edu.cn/showproblem.php?pid=2546 当我们遇到问题选择物体的价值和顺序相关时就需要,排完序后对其01处理.这题因为当我们 ...

  3. Spring学习之注入方式

    我们知道,Spring对象属性的注入方式有两种:设值注入和构造注入. 假设有个类为People,该对象包含三个属性,name和school还有age,这些属性都有各自的setter和getter方法, ...

  4. python自学笔记(三)python基本数据类型之列表list

    列表list特性概括 1.有序集合 2.通过偏移来索引,从而读取数据 3.支持嵌套 4.可变的类型(dict 字典也是可变的) (1)切片 a = [1,2,3,4,5,6,7] 正向索引 a[0:4 ...

  5. CentOS5.4下安装codeblocks 12.11

    centos6.3下安装codeblock简单多了,这些开源的软件也都在不断进步.原来装过codeblocks10.05,忘了,这次安装又花了我半天时间,最后总算搞定. 先是安装了wxGTK-2.8. ...

  6. C++ 面向对象学习2 构造方法

    Date.h #ifndef DATE_H #define DATE_H class Date{ public: Date(,,);//自定义了构造方法 会覆盖掉默认的无参构造方法 void setD ...

  7. uva11536 Smallest Sub-Array

    Thinking about it: 我的思路跟sliding window有点类似.假设已经确定了一个区间[l, r],序列中从 l 到 r 恰好包含了[1, K]的各个元素,则从 r 开始继续迭代 ...

  8. squee_spoon and his Cube VI(贪心,找不含一组字符串的最大长度+kmp)

    1818: squee_spoon and his Cube VI Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 77  Solved: 22Subm ...

  9. python 函数之walk

    import os for  root, dirs, files  in  os.walk("./"): print root print dirs print files 功能: ...

  10. Html.ActionLink(转载)

    @Html.ActionLink 代码: <h2>HtmlHelper</h2>@Html.ActionLink("默认","Index" ...