(一)思路:
满足升序又要是中位数之和最大,根据规律可以发现,要进行k次删除工作,每次都要删除一组中右边n/2个数,利用栈的思想,先入栈,在全部入栈后,进行出栈操作,取出栈顶元素后又出栈,接着开始进行k-1操作直到k为0,结束,然后把所取出栈顶的数相加则最大中位数之和就出来了。
(二)代码:
#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;
while(nk--)
{
int r;
cin>>r;
s.push(r);
}
long long sum=0;
while(k--)
{
int c=n/2;
while(c--)
{
s.pop();
}
sum+=s.top();
s.pop();
}
cout<<sum<<endl;
}
return 0;
} 
京公网安备 11010502036488号