1004_Median

// 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;
}

發佈了60 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章