// 1004_Median.cpp : 定义控制台应用程序的入口点。
//题目1004:Median
//时间限制:1 秒内存限制:32 兆特殊判题:否提交:18367解决:5087
//题目描述:
// Given an increasing sequence S of N integers, the median is the number at the middle position. For example, the median of S1={11, 12, 13, 14} is 12, and the median of S2={9, 10, 15, 16, 17} is 15. The median of two sequences is defined to be the median of the non-decreasing sequence which contains all the elements of both sequences. For example, the median of S1 and S2 is 13.
// Given two increasing sequences of integers, you are asked to find their median.
//输入:
// Each input file may contain more than one test case.
// Each case occupies 2 lines, each gives the information of a sequence. For each sequence, the first positive integer N (≤1000000) is the size of that sequence. Then N integers follow, separated by a space.
// It is guaranteed that all the integers are in the range of long int.
//输出:
// For each test case you should output the median of the two given sequences in a line.
//样例输入:
//4 11 12 13 14
//5 9 10 15 16 17
//样例输出:
//13
//来源:
//2011年浙江大学计算机及软件工程研究生机试真题
#include "stdafx.h"
#include "stdio.h"
#define MAX 1000002
long int a[MAX];
long int b[MAX];
int main()
{
int i,j,count,median;
int n,m;
while(scanf("%d",&n)!=EOF)
{
int k=n;
int flag = 0;
while(k>0)
scanf("%ld",&a[n-(k--)]);
scanf("%d",&m);
k=m;
while(k>0)
scanf("%ld",&b[m-(k--)]);
i=j=count=0;
median=(m+n+1)/2;
if(!median)
;
else{
do
if(a[i]>b[j])
{
j++;
count++;
if(count == median)
{
printf("%ld\n",b[j-1]);
break;
}
if (j == m)
{
flag = 1;
break;
}
}
else
{
i++;
count++;
if(count == median)
{
printf("%ld\n",a[i-1]);
break;
}
if (i == n)
{
flag = 2;
break;
}
}
}while(1);
if(flag ==1)
{
printf("%ld\n",a[i+median-count]);
}
else if(flag == 2)
printf("%ld\n",b[j+median-count]);
}
}
return 0;
}
1004_Median
最新推荐文章于 2019-03-19 15:03:21 发布