题目链接: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. IOS学习之蓝牙4.0

    1建立中心角色 1 2 3 #import <CoreBluetooth/CoreBluetooth.h>  CBCentralManager *manager;  manager = [ ...

  2. 关于css的默认宽度

    <div class="boxa"> <div class="boxb">我是div</div> </div> ...

  3. CSS learnning...

    "Whenever this property changes, apply that change slowly." The property transition: width ...

  4. Activity 启动模式

    Activity的启动模式有四种,分别是standard.singleTop.singleTask.singleInstance.   Android是通过回退栈的模式来管理Activity实例的.栈 ...

  5. java中如何获取系统时间

    需要引入的包有: import java.util.Date; 此为获取当前系统时间,合适为“1991-01-01” String now = "";    SimpleDateF ...

  6. 1.4. chromium源代码分析 - chromiumframe - 消息系列

    Message framework 是对消息循环的封装和扩展,Chromium在消息循环中增加处理内部任务的工作.将内部工作处理寄生在Windows的消息循环中,会有一个问题,就是没有Windows自 ...

  7. POJ 1743 Musical Theme(不可重叠最长重复子串)

    题目链接:http://poj.org/problem?id=1743 题意:有N(1 <= N <=20000)个音符的序列来表示一首乐曲,每个音符都是1..88范围内的整数,现在要找一 ...

  8. 200常用JS

    .文本框焦点问题 onBlur:当失去输入焦点后产生该事件 onFocus:当输入获得焦点后,产生该文件 Onchange:当文字值改变时,产生该事件 Onselect:当文字加亮后,产生该文件 &l ...

  9. C语言,函数的声明与定义

    函数声明与定义 变量: 在讲变量前,先讲一下变量的声明和定义这两个概念. 声明一个变量,意味着向编译器描述变量的类型,但不为变量分配存储空间. 定义一个变量,意味着在声明变量的同时还要为变量分配存储空 ...

  10. :before和:after的内幕以及伪类

    pseudo-classes vs pseudo-elements http://m.blog.csdn.net/blog/zhuizhuziwo/7897837