• 五一训练礼包—中位数


    中位数

    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;
    }

    (四) 总结

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

  • 相关阅读:
    WPF学习笔记(三)
    WPF自定义控件——使用Win32控件
    WPF学习笔记(二)
    WPF自定义控件 —— 装饰器
    WPF中改进自定义Command一些想法
    WPF自定义控件 —— 布局
    制作WPF联机飞行棋的失败体验
    WPF自定义控件 —— 自绘篇
    c语言清屏、等待、随机函数
    c语言一个显示星号的函数(隐藏密码)
  • 原文地址:https://www.cnblogs.com/kirk-notes/p/14728697.html
Copyright © 2020-2023  润新知