博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UESTC_秋实大哥与妹纸 2015 UESTC Training for Data Structures<Problem F>
阅读量:5128 次
发布时间:2019-06-13

本文共 2170 字,大约阅读时间需要 7 分钟。

F - 秋实大哥与妹纸

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 1500/1500KB (Java/Others)
Submit Status

致中和,天地位焉,万物育焉。秋实大哥是一个追求中庸的人。

虽然秋实大哥的仰慕者众多,但秋实大哥不喜欢极端的妹纸。所以他想从所有仰慕自己的妹纸中挑选出一个符合中庸之道的。

每一个妹纸对秋实大哥的仰慕程度可以用一个整数ai来表示,秋实大哥想要找出这些数的中位数。

计算有限个数的数据的中位数的方法是:

把所有的同类数据按照大小的顺序排列。如果数据的个数是奇数,则中间那个数据就是这群数据的中位数;如果数据的个数是偶数,则中间那2个数据的算术平均值就是这群数据的中位数。

Input

第一行有一个整数n,表示秋实大哥的仰慕者数目。

接下来n行,每行有一个正整数ai

1n2500001ai<231

Output

输出这n个数的中位数,保留一位小数。

Sample input and output

Sample Input Sample Output
3123
2.0

Hint

注意内存大小限制。

 

解题报告:

内存只能开一半..我们采用大根堆来维护,前一半直接读入大根堆,对于后一半的数据,若该数大于跟的max,则该元素是无用的,若小于,pop掉max值,再将该值压入heap中,最后根据n的奇偶性来读取heap前两层的数.

因为本题内存限制很紧。。因此使用的C语言来写

 

#include 
#define maxn 125005int heapsize = 0,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 / 2; while(pre > 0) { if (heap[cur] > heap[pre]) { swap(&heap[cur],&heap[pre]); cur = pre; pre = cur / 2; } else break; }}void maintainheap(){ // New Ele insert,maintain the heap int cur = 1 , tar = 2*cur; while(tar <= maxheapsize) { if (tar + 1 <= heapsize && heap[tar+1] > heap[tar]) tar++; if (heap[tar] > heap[cur]) { swap(&heap[tar],&heap[cur]); cur = tar; tar = cur*2; } else break; }}int main(int argc,char *argv[]){ int i; scanf("%d",&n); maxheapsize = n/2+1; for(i = 1 ; i <= maxheapsize ; ++ i) { int temp; scanf("%d",&temp); insert(temp); } for(; i <= n ; ++ i) { int temp; scanf("%d",&temp); if (temp < heap[1]) { heap[1] = temp; maintainheap(); } } long long ans = 0; if (n % 2) { ans = heap[1]; printf("%.1f\n",(double)ans); } else { ans = heap[1]; long long qans = heap[2]; if (heap[3] > qans) qans = heap[3]; ans += qans; printf("%.1f\n",(double)ans/2.*1.); } return 0;}

 

转载于:https://www.cnblogs.com/Xiper/p/4470212.html

你可能感兴趣的文章
Oracle中包的创建
查看>>
团队开发之个人博客八(4月27)
查看>>
发布功能完成
查看>>
【原】小程序常见问题整理
查看>>
C# ITextSharp pdf 自动打印
查看>>
【Java】synchronized与lock的区别
查看>>
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>
关于PHP会话:session和cookie
查看>>
STM32F10x_RTC秒中断
查看>>
display:none和visiblity:hidden区别
查看>>
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>
牛的障碍Cow Steeplechase
查看>>
Zookeeper选举算法原理
查看>>
3月29日AM
查看>>
利用IP地址查询接口来查询IP归属地
查看>>
HTML元素定义 ID,Class,Style的优先级
查看>>
构造者模式
查看>>
http和https的区别
查看>>
Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法...
查看>>