1004_Median

来源:互联网 发布:ubuntu caffe 编辑:程序博客网 时间:2024/06/01 21:57
// 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 1000002long 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;}
0 0
原创粉丝点击