题意:给你一个升序数列,两个整数n,k,满足将序列分为k个(递增)数组,每个数组n个数,并使每个数组的中位数之和最大。
要递增,又要和最大,所以先确定中位数的位置(因为每个数组程度已知),将输入序列从最后一位(即最大值)从后开始排,直到排到中位数(包括),再用前面的数排。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long t,sum;
    cin>>t;
    long long a[200005]={0};
    while(t--)
    {
        sum=0;
        long long n,k,p;
        cin>>n>>k;
        for(long long i=1;i<=n*k;i++)
        {
            cin>>a[i];
        }
        p=n/2+1;//中位数位置
        for(long long i=n*k-p+1;k>0;i-=p,k--)//从最大的数开始排
        {
            sum+=a[i];
        }
        cout<<sum<<endl;
    }
    return 0;
}