PAT 1029. Median

尼玛,数组偶数个数的时候取中位数是取中间两者中的前者,还tmd一直再算平均,卧槽

#include <iostream>

#include <cstdio>

#include <cstdlib>

#include <vector>



using namespace std;



int min(int a, int b) {

    return a<b? a:b;

}



int main() {



    int na, nb;



    scanf("%d", &na);

    vector<int> a(na);

    

    for (int i=0; i<na; i++) {

        scanf("%d", &a[i]);

    }

    

    scanf("%d", &nb);

    vector<int> b(nb);

    

    for (int i=0; i<nb; i++) {

        scanf("%d", &b[i]);

    }



    int ia = 0, ib = 0;

    

    int idx = 0;

    int mid = (na + nb) / 2;

    

    int mv = 0, mv2;

    while (ia < na && ib < nb && idx < mid) {

        if (a[ia] <= b[ib]) {

            mv = a[ia];

            ia++;

        } else {

            mv = b[ib];

            ib++;

        }

        idx++;

    }



    while (ia < na && idx < mid) {

        mv = a[ia];

        ia++;

        idx++;

    }

    

    while (ib < nb && idx < mid) {

        mv = b[ia];

        ib++;

        idx++;

    }



    if (ia < na && ib < nb) {

        mv2 = min(a[ia], b[ib]);

    } else if (ia < na) {

        mv2 = a[ia];

    } else if (ib < nb) {

        mv2 = b[ib];

    }

    

    if ((na + nb) & 1) {

        // odd

        cout<<mv2<<endl;

    } else {

        // even

        cout<<mv<<endl;

    }



    system("pause");

    return 0;

}

 log(na+nb)算法见:http://www.cnblogs.com/lailailai/p/3982103.html

你可能感兴趣的:(media)