// 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.