zoukankan      html  css  js  c++  java
  • ACM题目————中位数

    题目描述

    长为L的升序序列S,S[L / 2]为其中位数。

    给出两个等长升序序列S1和S2,求两序列合并并排序后的中位数。

    输入

    多组数据,每组第一行为n,表示两个等长升序序列的长度。

    接下来n行为升序序列S1的元素,再接下来n行为升序序列S2的元素。

    1 <= n <= 10 ^ 5,S内容为整数。

    不超过5组数据。

    输出

    每组数据,输出合并并排序后的序列的中位数。

    样例输入

    5
    11
    13
    15
    17
    19
    2
    4
    6
    8
    20
    

    样例输出

    11

     本来以为是可以直接排序过,但是没想到数据卡的太死。唉!还是太年轻啊!

    //用二分的思想,直接递归求中位数
    
    #include <stdio.h>
     
    const int MAX = 100005 ;
    int a[MAX], b[MAX], n;
     
    int get_middle_number(int a[], int b[], int n)
    {
        int         start1 = 0, end1 = n-1, m1;
        int         start2 = 0, end2 = n-1, m2;
     
        while (start1 != end1 || start2 != end2)
        {
            m1 = (start1 + end1) / 2;
            m2 = (start2 + end2) / 2;
            if (a[m1] == b[m2])
                return a[m1];
            if (a[m1] < b[m2])
            {
                if ((start1+end1) % 2 == 0)
                {
                    start1 = m1;
                    end2 = m2;
                }
                else
                {
                    start1 = m1 + 1;
                    end2 = m2;
                }
            }
            else
            {
                if ((start1+end1) % 2 == 0)
                {
                    end1 = m1;
                    start2 = m2;
                }
                else
                {
                    end1 = m1;
                    start2 = m2 + 1;
                }
            }
        }
        return a[start1] < b[start2] ? a[start1] : b[start2];
    }
     
    int main()
    {
        char str[10];
        while(scanf("%d",&n)!=EOF)
        {
            int count1 = 0, flag = 0, k=0;
            for(int i=0; i<n; i++)
                scanf("%d",&a[i]);
            for(int i=0; i<n; i++)
                scanf("%d",&b[i]);
            int mid = get_middle_number(a,b,n);
            printf("%d
    ",mid);
        }
     
        return 0;
    }
    
    低调做人,高调做事。
  • 相关阅读:
    开发自定义控件步骤
    asp.net后台调用前台js代码
    使用ResolveUrl设置相对路径
    JavaScript获取后台C#变量以及调用后台方法
    使用jquery的验证插件进行客户端验证
    参数化的模糊查询
    使用Microsoft Enterprise Library 5.0记录日志信息
    我的Ajax学习笔记
    我的工作問題集(VS2005)
    存储过程从入门到精通(转载)
  • 原文地址:https://www.cnblogs.com/Asimple/p/5495242.html
Copyright © 2011-2022 走看看