九度OJ 1004-程序员宅基地

技术标签: C++  数论  九度OJ  

题目描述:

    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

题目大意:给定两个非递减数组,求出它们的中间元素。具体来说,就是将它们排成一个非递减序列,然后求出中间位置的元素。
由两个数组序列得到另一个由它们组成的非递减的序列,明显用归并排序,时间复杂度在O(m+n)内完成。
归并排序,用两个指针指向数组开头元素,比较首个元素大小,小的那个元素输出,并且指针往后移一个,再进行比较,循环下去直到某一个序列结束,之后就直接将另一个序列的其余元素输出即可。

#include <iostream>
using namespace std;

int main(){
    int n,m;
    long int *a;
    long int *b;
    long int *c;
    while(cin>>n){
        a = new long int[n];
        for(int i=0;i<n;i++)
            cin>>a[i];
        cin>>m;
        b = new long int[m];
        c = new long int[m+n];
        for(int i=0;i<m;i++)
            cin>>b[i];
        int j=0,k=0;
        for(int i=0;i<m+n;i++){
            if(a[j]<b[k] && j<n){
                c[i] = a[j];
                j++;
            }
            else if(a[j]>=b[k] && k<m){
                c[i] = b[k];
                k++;
            }
            if(j == n){
                while(k<m){
                    i++;
                    c[i] = b[k];
                    k++;
                }
                break;
            }
            if(k == m){
                while(j<n){
                    i++;
                    c[i] = a[j];
                    j++;
                }
                break;
            }
        }
        cout<<c[(m+n-1)/2]<<endl;
    }
    return 0;
}


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Jaster_wisdom/article/details/51635357

智能推荐

use of deleted function ‘std::basic_istream<_CharT, _Traits>::basic_istream(const std::basic_istream_use of deleted function 'std::basic_fstream<_chart-程序员宅基地

文章浏览阅读844次。下述代码报错,原因是因为istream后漏了一个 &//从输入流中将家庭作业的成绩读入到一个vector<double>中istream read_hw(istream& in, vector<double>& hw){ if (in) { //清除vector原先的内容 hw.clear(); //读家庭作业成绩 double x; while (in >_use of deleted function 'std::basic_fstream<_chart, _traits>::basic_fstream(

基于MindSpore的Transformer网络实现_seq2seq mindspore-程序员宅基地

文章浏览阅读1.3k次。Transformer使用Self Attention机制解决了传统的基于RNN的Seq2Seq模型难以处理长序列的句子,存在信息丢失情况以及无法并行训练(时序依赖)的问题。Transformer包含Encoder和Decoder两部分,其中Encoder单元和Decoder单元重复了N次(N可以设置,论文中N值为6)。_seq2seq mindspore

网络安全入门 5 天速成教程_ WEB 安全渗透攻防技术-程序员宅基地

文章浏览阅读812次,点赞8次,收藏30次。希望能帮助大家尽快入门。

Mtk Camera Hal到驱动的流程(一)_mtk imageio-程序员宅基地

文章浏览阅读4.3k次,点赞7次,收藏78次。(1)架构介绍(A)Camera的框架分为Kernel部分和Hal部分Kernel部分:image sensor driver——负责具体型号的sensor的id检测,上电,以及在preview、capture、初始化、3A等等功能设定时的寄存器配置;ISP driver——通过DMA将sensor数据流上传;Hal部分:imageio——主要负责数据buffer上传的pipe;drv——包含imgsensor和isp的hal层控制;feature io——包含各种3A等性能配置;_mtk imageio

相机成像原理以及旋转_摄像机平移旋转的原理-程序员宅基地

摘要:相机成像原理涉及点在不同坐标系中的矩阵变换,包括世界、相机、像平面和像素平面坐标系。具体变换关系可用矩阵表达,可求得单位向量。

Android 13中的 Open Mobile API_sim trasmit apdu-程序员宅基地

文章浏览阅读4.4k次,点赞4次,收藏12次。SE 也就是 Secure Element,译为 “安全元素”主要应用场景在 手机手表交通卡、门禁、虚拟钱包、虚拟SIM卡,以及其他身份认证的且对安全级别有一定要求的业务。_sim trasmit apdu

随便推点

Error downloading packages: qt3-3.3.8b-51.el7.x86_64: [Errno 256] No more mirrors to try._no presto metadata available for base-程序员宅基地

文章浏览阅读7.6k次。Error downloading packages: qt3-3.3.8b-51.el7.x86_64: [Errno 256] No more mirrors to try. 1:qt-x11-4.8.7-2.el7.x86_64: [Errno 256] No more mirrors to try. 解决办法_no presto metadata available for base

matlab cell2mat 函数将元胞转换成数值矩阵出错_m{n} = cat(1,c{:,n});-程序员宅基地

文章浏览阅读1.5w次,点赞5次,收藏19次。matlab cell2mat 函数将元胞转换成数值矩阵出错matlab 中经常涉及到各种数据类型的转换。在将元胞型转换成数值矩阵的过程中我遇到了一个非常有趣的问题,代码如下:% 元胞型转换为数值型矩阵close allclearclc% 这个data中的price是从excel中读取的数据并做在matlab中做了一定转换处理load data% 生成元胞型矩阵,m1整数型,m2浮..._m{n} = cat(1,c{:,n});

Python读取json文件-程序员宅基地

文章浏览阅读4.5w次,点赞22次,收藏91次。使用Python读取json文件,并输出为两种不同类型(python对象、字符串)的数据._python读取json文件

Unsigned char*格式彩色图转换为QImage格式_char*转qimage-程序员宅基地

文章浏览阅读1.8k次。最近用QT显示图像,内存中的图像数据是以GBR顺序放在一个Unsigned char*数组中,需要将数组中数据转换成QImage格式unsigned char *pImage;QImage img = QImage(width, height, QImage::Format_RGB32);for(int i = 0; i<height; i++){int t = i*w..._char*转qimage

计算机操作系统 实验四:进程通信(二)_消息缓冲队列。使用系统调用msgget ()、msgsnd ()、msgrcv ()及msgctl -程序员宅基地

文章浏览阅读9.1k次,点赞32次,收藏117次。1 .实验目的学习如何利用消息缓冲队列进行进程间的通信,并加深对消息缓冲队列通信机制的理解。2 .实验内容(1) 了解系统调用msgget()、msgsnd()、msgrcv()、msgctl()的功能和实现过程。(2) 编写一段程序,使其用消息缓冲队列来实现父进程和子进程之间的通信。父进程先建立一个关键字为MSGKEY(如75)(即#define MSGKEY 75)的消息队列,..._消息缓冲队列。使用系统调用msgget ()、msgsnd ()、msgrcv ()及msgctl () 编制消

如何使用mp4v2将H264+AAC裸流录制成mp4文件,并保持音视频同步【源码】【mp4】【录像】_mp4v2 同步音视频-程序员宅基地

文章浏览阅读6.5k次,点赞2次,收藏23次。前言: mp4文件目前已经成为了流媒体音视频行业的通用标准文件格式,它是基于mov格式基础上演变来的,特别适合多平台播放,录制一次,多个平台都可使用。但是,由于mp4格式相对比较复杂,直到mp4v2这个开源工程的出现,解决了这个问题。 通常,我们在使用mp4文件时,会遇到两个问题:如何从已有的mp4文件中抽取音视频数据帧;如何将音视频数据帧录制成mp4文件,并保持音视频同步。 上..._mp4v2 同步音视频

推荐文章

热门文章

相关标签