解题报告——POJ 2623

Sequence Median

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 15792   Accepted: 4409

Description

Given a sequence of N nonnegative integers. Let‘s define the median of such sequence. If N is odd the median is the element with stands in the middle of the sequence after it is sorted. One may notice that in this case the median has position (N+1)/2 in sorted sequence if sequence elements are numbered starting with 1. If N is even then the median is the semi-sum of the two "middle" elements of sorted sequence. I.e. semi-sum of the elements in positions N/2 and (N/2)+1 of sorted sequence. But original sequence might be unsorted.

Your task is to write program to find the median of given sequence.

Input

The first line of input contains the only integer number N - the length of the sequence. Sequence itself follows in subsequent lines, one number in a line. The length of the sequence lies in the range from 1 to 250000. Each element of the sequence is a positive integer not greater than 2^32 - 1 inclusive.

Output

You should print the value of the median with exactly one digit after decimal point.

Sample Input

4
3
6
4
5

Sample Output

4.5

Hint

Huge input,scanf is recommended.

------------------------------------------------------------------------------------------------

这道题可以直接用快排进行计算,然后直接计算中位数。

需要注意的小地方如下:

1. 数组类型:采用long long的原因是为了计算sum,这个值超过了unsinged的范围

2. 浮点数输出:对于大数字(2^32 - 1),不能用浮点数表示,而应该将浮点数拆分为整数和小数进行拼装。

-----------------------------------------------------------------------------------------------

 1 #include <cstdio>
 2 #include <algorithm>
 3
 4 using namespace std;
 5
 6 int main()
 7 {
 8     long long a[250005];
 9     int n;
10     scanf("%d", &n);
11     for(int i = 0; i < n; i++)
12     {
13         scanf("%lld", &a[i]);
14     }
15     sort(a, a + n);
16     if(n & 1)
17     {
18         printf("%lld.0\n", a[n / 2]);
19     }
20     else
21     {
22         long long sum = a[n / 2] + a[n / 2 - 1];
23         printf("%lld", sum / 2);
24         if(sum & 1)
25         {
26             printf(".5\n");
27         }
28         else
29         {
30             printf(".0\n");
31         }
32     }
33
34     return 0;
35 }
时间: 2024-10-13 01:27:53

解题报告——POJ 2623的相关文章

解题报告——POJ 2002

Squares Time Limit: 3500MS   Memory Limit: 65536K Total Submissions: 16908   Accepted: 6425 Description A square is a 4-sided polygon whose sides have equal length and adjacent sides form 90-degree angles. It is also a polygon such that rotating abou

解题报告——POJ 1579

Description We all love recursion! Don't we? Consider a three-parameter recursive function w(a, b, c): if a <= 0 or b <= 0 or c <= 0, then w(a, b, c) returns: 1 if a > 20 or b > 20 or c > 20, then w(a, b, c) returns: w(20, 20, 20) if a &

解题报告——POJ 2299

Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 44671   Accepted: 16240 Description In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swappin

解题报告——POJ 2726

Holiday Hotel Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8204   Accepted: 3211 Description Mr. and Mrs. Smith are going to the seaside for their holiday. Before they start off, they need to choose a hotel. They got a list of hotels

poj 3020 Antenna Placement 解题报告

题目链接:http://poj.org/problem?id=3020 题目意思:首先,请忽略那幅有可能误导他人成分的截图(可能我悟性差,反正有一点点误导我了). 给出一幅 h * w 的图,  “ * ” 表示 point of interest,“ o ” 忽略之.你可以对 " * " (假设这个 “* ”的坐标是 (i, j))画圈,每个圈只能把它四周的某一个点括住(或者是上面(i-1, j) or 下面(i+1, j) or 左边(i, j-1)  or 右边(i, j+1))

poj 1469 COURSES 解题报告

题目链接:http://poj.org/problem?id=1469 题目意思:略 for 循环中遍历的对象要特别注意,究竟是遍历课程数P 还是 学生数N,不要搞混! 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 const int maxn = 300 + 5; 7 int match[maxn], map[maxn][maxn];

poj 1789 Truck History 解题报告

题目链接:http://poj.org/problem?id=1789 题目意思:给出 N 行,每行7个字符你,统计所有的 行 与 行 之间的差值(就是相同位置下字母不相同),一个位置不相同就为1,依次累加.问最终的差值最少是多少. 额.....题意我是没看懂啦= =......看懂之后,就转化为最小生成树来做了.这是一个完全图,即每条边与除它之外的所有边都连通.边与边的权值是通过这个差值来算出来的. 1 #include <iostream> 2 #include <cstdio>

poj 1860 Currency Exchange 解题报告

题目链接:http://poj.org/problem?id=1860 题目意思:给出 N 种 currency, M种兑换方式,Nick 拥有的的currency 编号S 以及他的具体的currency(V).M 种兑换方式中每种用6个数描述: A, B, Rab, Cab, Rba, Cba.其中,Rab: 货币A 兑换 货币B 的汇率为Rab,佣金为Cab.Rba:货币B 兑换 货币 A 的汇率,佣金为Cba.假设含有的A货币是x,那么如果兑换成B,得到的货币B 就是:(x-Cab) *

poj 2531 Network Saboteur 解题报告

题目链接:http://poj.org/problem?id=2531 题目意思:将 n 个点分成两个部分A和B(也就是两个子集啦), 使得子集和最大(一定很难理解吧,呵呵).举个例子吧,对于样例,最佳的分法就是把点2分为一个子集,另一个子集理所当然就是1.3了. 2-1 的权值是50,2-3的权值是40,那么最大就是50+40 = 90了. 首先dfs的话,我不太会做啦.看了队长的用了状态压缩来做,一下子觉得好神奇!!!! 可能第一次接触,理解得不是太深刻,先留着吧.就觉得好神奇,好神奇...