题意:给你一个升序数列,两个整数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; }