• 五一训练礼包—中位数


    中位数

    Content

      · 题目回溯

      · 题目分析

      · 可行代码

      · 总结

    (一) 题目回溯

      DESCRIPTION

      INPUT

      OUTPUT

      EXAMPLE

      NOTE

    (二) 题目分析

      由题可知,数组升序,从数组头开始,每个数与后面的数组成一个新的数组(新数组除了第一个数和必须升序以外别的没有限制),然后在新的数组中找中位数,累加求和。

       为了保证最后的和最大,就必须保证每一个新数组中位数最大。

      所以新的数组可以是数组头后的每一个数字与数组尾的( n - 1 )个数字构成一个新的数组然后取中位数。

       从数组尾开始组队,可以用栈来存储数据。

      取中位数的次数为k次,每次出栈n / 2个后就是新数组的中位数,累加中位数后出栈中位数即可。

    (三) 可行代码

    #include <iostream>
    #include <stack>
    using namespace std;
    int main() {
        int T;
        cin >> T;
        while (T--) {
            int n, k;
            cin >> n >> k;
            stack<long long> s;
            int nk = n * k, temp;
            while (nk--)
                cin >> temp, s.push(temp);
            long long tempK = k, sum = 0;
            while (tempK--)
            {
                int tempN = n / 2;
                while (tempN--)
                    s.pop();
                sum += s.top(), s.pop();
            }
            cout << sum << endl;
        }
        return 0;
    }

    (四) 总结

       本题主要考察对题干定义的中位数的理解

  • 相关阅读:
    C++ STL Set使用
    C++ STL算法
    C++ STL List使用
    C++中的构造析构函数
    七、Linux进程调度-应用内核设置调度策略和优先级
    Qcom高通相关汇总
    Cgroup内核文档翻译(8)——/dev/cpuctl/*
    用户进程和内核线程的CPU亲和性设置
    Scheduler内核文档翻译(1)——Documentationschedulersched-tune.txt
    uCgui和emWin的区别
  • 原文地址:https://www.cnblogs.com/kirk-notes/p/14728697.html
Copyright © 2020-2023  润新知