UESTC_秋实大哥与妹纸 2015 UESTC Training for Data Structures<Problem F>
F - 秋实大哥与妹纸
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 1500/1500KB (Java/Others)
致中和,天地位焉,万物育焉。秋实大哥是一个追求中庸的人。
虽然秋实大哥的仰慕者众多,但秋实大哥不喜欢极端的妹纸。所以他想从所有仰慕自己的妹纸中挑选出一个符合中庸之道的。
每一个妹纸对秋实大哥的仰慕程度可以用一个整数ai来表示,秋实大哥想要找出这些数的中位数。
计算有限个数的数据的中位数的方法是:
把所有的同类数据按照大小的顺序排列。如果数据的个数是奇数,则中间那个数据就是这群数据的中位数;
如果数据的个数是偶数,则中间那2个数据的算术平均值就是这群数据的中位数。
Input
第一行有一个整数n,表示秋实大哥的仰慕者数目。
接下来n行,每行有一个正整数ai。
1≤n≤250000,1≤ai<231。
Output
输出这n个数的中位数,保留一位小数。
Sample input and output
| Sample Input | Sample Output |
|---|---|
3 |
2.0 |
Hint
注意内存大小限制。
解题报告:
内存只能开一半..我们采用大根堆来维护,前一半直接读入大根堆,对于后一半的数据,若该数大于跟的max,则该元素是无用的,若小于,pop掉max值,再将该值压入heap中,最后根据n的奇偶性来读取heap前两层的数.
因为本题内存限制很紧。。因此使用的C语言来写
#include <stdio.h>
#define maxn 125005
int heapsize = ,heap[maxn],maxheapsize,n; void swap(int *x,int *y)
{
int temp = *x;
*x = *y;
*y = temp;
} void insert(int x)
{
heap[++heapsize] = x;
int cur = heapsize , pre = heapsize / ;
while(pre > )
{
if (heap[cur] > heap[pre])
{
swap(&heap[cur],&heap[pre]);
cur = pre;
pre = cur / ;
}
else
break;
}
} void maintainheap()
{
// New Ele insert,maintain the heap
int cur = , tar = *cur;
while(tar <= maxheapsize)
{
if (tar + <= heapsize && heap[tar+] > heap[tar])
tar++;
if (heap[tar] > heap[cur])
{
swap(&heap[tar],&heap[cur]);
cur = tar;
tar = cur*;
}
else
break;
}
} int main(int argc,char *argv[])
{
int i;
scanf("%d",&n);
maxheapsize = n/+;
for(i = ; i <= maxheapsize ; ++ i)
{
int temp;
scanf("%d",&temp);
insert(temp);
}
for(; i <= n ; ++ i)
{
int temp;
scanf("%d",&temp);
if (temp < heap[])
{
heap[] = temp;
maintainheap();
}
}
long long ans = ;
if (n % )
{
ans = heap[];
printf("%.1f\n",(double)ans);
}
else
{
ans = heap[];
long long qans = heap[];
if (heap[] > qans)
qans = heap[];
ans += qans;
printf("%.1f\n",(double)ans/.*.);
}
return ;
}
UESTC_秋实大哥与妹纸 2015 UESTC Training for Data Structures<Problem F>的更多相关文章
- UESTC_秋实大哥与线段树 2015 UESTC Training for Data Structures<Problem M>
M - 秋实大哥与线段树 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Sub ...
- UESTC_秋实大哥与时空漫游 2015 UESTC Training for Graph Theory<Problem C>
C - 秋实大哥与时空漫游 Time Limit: 4500/1500MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Su ...
- UESTC_秋实大哥与连锁快餐店 2015 UESTC Training for Graph Theory<Problem A>
A - 秋实大哥与连锁快餐店 Time Limit: 9000/3000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) S ...
- UESTC_秋实大哥の恋爱物语 2015 UESTC Training for Search Algorithm & String<Problem K>
K - 秋实大哥の恋爱物语 Time Limit: 5000/2000MS (Java/Others) Memory Limit: 32000/32000KB (Java/Others) Su ...
- UESTC_秋实大哥搞算数 2015 UESTC Training for Data Structures<Problem N>
N - 秋实大哥搞算数 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Subm ...
- UESTC_秋实大哥下棋 2015 UESTC Training for Data Structures<Problem I>
I - 秋实大哥下棋 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_秋实大哥打游戏 2015 UESTC Training for Data Structures<Problem H>
H - 秋实大哥打游戏 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Subm ...
- UESTC_秋实大哥去打工 2015 UESTC Training for Data Structures<Problem G>
G - 秋实大哥去打工 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Subm ...
- UESTC_秋实大哥与家 2015 UESTC Training for Data Structures<Problem E>
E - 秋实大哥与家 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
随机推荐
- 【转】Android中自动连接到指定SSID的Wi-Fi
最近在做一个项目,其中涉及到一块“自动连接已存在的wifi热点”的功能,在网上查阅了大量资料,五花八门,但其中一些说的很简单,即不能实现傻瓜式的拿来就用,有些说的很详细,但其中不乏些许错误造成功能无法 ...
- hdu 5656 CA Loves GCD(dp)
题目的意思就是: n个数,求n个数所有子集的最大公约数之和. 第一种方法: 枚举子集,求每一种子集的gcd之和,n=1000,复杂度O(2^n). 谁去用? 所以只能优化! 题目中有很重要的一句话! ...
- Dom4j解析xml格式的字符串【java】
一般我们会使用dom4j.SAX.w3c来解析xml文件,网上也大多提供此类解决方案. 但在实际项目中,也有会解析xml格式的字符串报文的. 比如,有如下字符串: String = "< ...
- CSDN 正整数异或值问题
题目详情: http://student.csdn.net/mcs/programming_challenges?page=4 给你n个正整数,请你计算出有多少对数的异或值小于等于k. 输入描写叙述: ...
- HDU4496_D-City(并查集删边/逆向)
D-City Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total Sub ...
- Android开发 ADB server didn't ACK, failed to start daemon解决方案
有时候在打开ddms的时候,会看到adb会报如题的错误,解决方案是打开任务管理器,(ctrl+shift+esc),然后关掉adb.exe的进程,重启eclipse就ok了. 还有许多无良商家开发的垃 ...
- rhel5.8-LAMP环境搭建
一.LAMP安装前的准备 安装环境:rhel5.8 zabbix-2.4.5 php-5.6.8 MySQL5.6.23 libpng-1.5.9 zlib-1.2.7 (apr,apr ...
- struts2 的struts.xml配置详解
在应用struts框架进行开发时,必不可少的一步就是对struts.xml进行配置,对于该文件了解越多,我们开发起一应用程序定会更加顺手.下面我们看一下struts.xml的内容,每一项都有什么作用. ...
- java基础知识4
58.线程的基本概念.线程的基本状态以及状态之间的关系线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身.Java中的线程有四种状态分别是:运行.就绪.挂 ...
- java读取xml文件报“org.xml.sax.SAXParseException: Premature end of file” .
背景:java读取xml文件,xml文件内容只有“<?xml version="1.0" encoding="UTF-8"?>”一行 java读取该 ...