[Swust OJ 1094]--中位数(巧用set,堆排序)
题目链接:http://acm.swust.edu.cn/problem/1094/
中位数(又称中值,英语:Median),统计学中的专有名词,代表一个样本、种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分。对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,则中位数不唯一,通常取最中间的两个数值的平均数作为中位数。
多组输入
第一行:一个正整数N (0<N<1000000)
第二行:N个正整数。(0=<A[i]<2^30)
每组数据先输出”Case X:”,X表示测试数据的编号,从1开始。
第二行输出N个数,第i个数对应数组前i个值的中位数。(精确到小数点后一位)
1
2
3
4
5
|
5
1 2 3 4 5
6
2 5 4 8 7 4
|
1
2
3
4
5
|
Case 1:
1.0 1.5 2.0 2.5 3.0
Case 2:
2.0 3.5 4.0 4.5 5.0 4.5
|
#include <iostream>
#include <set>
#include <cstdio>
using namespace std; #define rep(i,a,b) for(int i=a;i<=b;i++)
int t, n;
multiset<double>mpt; void mid_num(){
double x;
printf("Case %d:\r\n", ++t);
mpt.clear();
scanf("%lf", &x);
mpt.insert(x);
multiset <double> ::iterator it = mpt.begin();
printf("%.1lf", x);
rep(i, , n){
scanf("%lf", &x);
mpt.insert(x);
if (x < *it){
if (i & ) printf(" %.1lf", *(--it));
else {
multiset <double> ::iterator it1 = it;
printf(" %.1lf", (*it + *(--it1)) / 2.0);
}
}
else {
if (i & ) printf(" %.1lf", *it);
else {
++it;
multiset <double> ::iterator it1 = it;
printf(" %.1lf", (*it + *(--it1)) / 2.0); }
}
}
printf("\r\n");
} int main(){
while (~scanf("%d", &n))
mid_num();
return ;
}
堆排序的代码也贴出来吧(原谅我太懒没有优化这代码~~~)
#include <stdio.h>
#include <string.h>
int lstack[], ltot, rstack[], rtot, mid;
int Max(int a, int b){
return a > b ? a : b;
}
int Min(int a, int b){
return a<b ? a : b;
}
void lup(int step){
while (step != ){
if (lstack[step]>lstack[step / ])lstack[step] ^= lstack[step / ] ^= lstack[step] ^= lstack[step / ];
else break;
step = step / ;
}
if (step == && lstack[] > mid) lstack[] ^= mid ^= lstack[] ^= mid;
}
void ldown(){
if (ltot > && mid < lstack[]) mid ^= lstack[] ^= mid ^= lstack[];
else return;
int step = ;
while (step * < ltot){
if (step * + >= ltot){
if (lstack[step] < lstack[step * ])
lstack[step] ^= lstack[step * ] ^= lstack[step] ^= lstack[step * ], step = step * ;
else return;
}
else{
if (lstack[step] <= lstack[step * ] && lstack[step * + ] <= lstack[step * ])
lstack[step] ^= lstack[step * ] ^= lstack[step] ^= lstack[step * ], step = step * ;
else if (lstack[step] <= lstack[step * + ] && lstack[step * ] <= lstack[step * + ])
lstack[step] ^= lstack[step * + ] ^= lstack[step] ^= lstack[step * + ], step = step * + ;
else return;
}
}
}
void rup(int step){
while (step != ){
if (rstack[step]<rstack[step / ])rstack[step] ^= rstack[step / ] ^= rstack[step] ^= rstack[step / ];
else break;
step = step / ;
}
if (step == && rstack[]<mid) rstack[] ^= mid ^= rstack[] ^= mid;
}
void rdown(){
if (rtot> && mid>rstack[]) mid ^= rstack[] ^= mid ^= rstack[];
else return;
int step = ;
while (step * < rtot){
if (step * + >= rtot){
if (rstack[step] > rstack[step * ])
rstack[step] ^= rstack[step * ] ^= rstack[step] ^= rstack[step * ], step = step * ;
else return;
}
else{
if (rstack[step] >= rstack[step * ] && rstack[step * + ] >= rstack[step * ])
rstack[step] ^= rstack[step * ] ^= rstack[step] ^= rstack[step * ], step = step * ;
else if (rstack[step] >= rstack[step * + ] && rstack[step * ] >= rstack[step * + ])
rstack[step] ^= rstack[step * + ] ^= rstack[step] ^= rstack[step * + ], step = step * + ;
else return;
}
}
}
int main()
{
int t = , n, i;
while (scanf("%d", &n) != EOF){
printf("Case %d:\r\n", t++);
scanf("%d", &mid);
ltot = rtot = ;
printf("%.1lf", (double)mid);
for (i = ; i < n; i++){
if (i % ){
scanf("%d", &lstack[ltot]);
lup(ltot);
rdown();
ltot++;
printf(" %.1lf", (mid + lstack[]) / 2.0);
}
else{
scanf("%d", &rstack[rtot]);
rup(rtot);
ldown();
rtot++;
printf(" %.1lf", (double)mid);
}
}
printf("\r\n");
}
return ;
}
[Swust OJ 1094]--中位数(巧用set,堆排序)的更多相关文章
- [Swust OJ 404]--最小代价树(动态规划)
题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535 Des ...
- [Swust OJ 649]--NBA Finals(dp,后台略(hen)坑)
题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two ...
- SWUST OJ NBA Finals(0649)
NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128 Descri ...
- [Swust OJ 746]--点在线上(线段树解法及巧解)
题目链接:http://acm.swust.edu.cn/problem/746/ Time limit(ms): 1000 Memory limit(kb): 65535 fate是一个数学大牛 ...
- [Swust OJ 1026]--Egg pain's hzf
题目链接:http://acm.swust.edu.cn/problem/1026/ Time limit(ms): 3000 Memory limit(kb): 65535 hzf ...
- [swustoj 1094] 中位数
中位数(1094) 问题描述 中位数(又称中值,英语:Median),统计学中的专有名词,代表一个样本.种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分.对于有限的数集,可以通过把所有 ...
- 九度OJ 1371 最小的K个数 -- 堆排序
题目地址:http://ac.jobdu.com/problem.php?pid=1371 题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4 ...
- [Swust OJ 1023]--Escape(带点其他状态的BFS)
解题思路:http://acm.swust.edu.cn/problem/1023/ Time limit(ms): 5000 Memory limit(kb): 65535 Descript ...
- [Swust OJ 1125]--又见GCD(数论,素数表存贮因子)
题目链接:http://acm.swust.edu.cn/problem/1125/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ...
随机推荐
- ThinkPHP第十五天(setField、setInc、setDec、关联模型)
1.ThinkPHP中的比较特殊连贯操作 如果要更新某个字段可以用setField方法,比如M('user')->where('id=1')->setField('username','T ...
- 【算法】求多个数组中的交集(Java语言实现)
简介: 最近在工作中遇到一个问题,需要离线比较两张Mongodb表的差异:大小差异,相同的个数. 所以,我将导出的bson文件转成了json文件(2G以上),一条记录正好是一行. 问题: 因此我将以上 ...
- [LeetCode]题解(python):076-Minimum Window Substring
题目来源: https://leetcode.com/problems/minimum-window-substring/ 题意分析: 给定两个字符串S和T.在S中找到最短的一个子字符串使得他包括所有 ...
- android--email发送邮件,文本还有附件形式的邮件
1.首先用的jar包为javaemail 下载地址: https://yunpan.cn/cB3kY8WIvcGtU (提取码:e042) 2.工具包 package com.kllayhello.u ...
- c 语言简单计算器源码
// main.c // 计算器 // Created by qianfeng on 14-7-15. // Copyright (c) 2014年 ___FGY___. All rights ...
- perl5 第四章 列表和数组变量
第四章 列表和数组变量 by flamephoenix 一.列表二.数组--列表的存贮 1.数组的存取 2.字符串中的方括号和变量替换 3.列表范围 4.数组的输出 5.列表/数组的长度 ...
- CSF 中的应用程序请求路由
编辑人员注释:本文章由 AzureCAT 团队的 Christain Maritnez 撰写. 应用程序请求路由(简称为 ARR)可能是 Microsoft 使用的技术中讨论得最少但极为重要的技术之一 ...
- 基于Visual C++2013拆解世界五百强面试题--题9-找出所有的排列方式
给出一个函数来输出一个字符串的所有排列 按照排列组合的知识我们知道 N个字符排列组合个数有n!种, 那么可知f(n) = n*f(n-1), 如果{1,2}的组合有两种,12,21, 那么{123}的 ...
- EF使用时异常:对一个或多个实体的验证失败。有关详细信息
//最顶级异常中是不提示具体哪个字段验证失败,必须到详细异常类型中查看 try { //EF操作 } catch (System.Data.Entity.Validation.DbEntityVali ...
- 文件下载 .net
protected void Button1_Click(object sender, EventArgs e) { /* 微软为Response对象提供了一个新的方法TransmitFile来解决 ...