先寻找规律:
n=2时,中位数为1,第1和第2为一组,第3和第4为一组,目的是不浪费后面的大数。
n=3时,中位数为2,即1为较小数,2和3为大数使大数为中位数。
n=4时,中位数为2,1小数,2 3和4为大数。
n=5时,中位数为3,1和2小数,3 4 5为大数。
故可得出规律:每一组数的大数都取倒序第n/2+1个数。
即可分组求出每一组最大中位数求和。
#include<stdio.h> int main() { long long a[200002]; long long t,i; scanf("%lld",&t); while(t--) { long long n,k,max=0,m; scanf("%lld %lld",&n,&k); for(i=0;i<n*k;i++) { scanf("%lld",&a[i]); } m=n/2+1; i=n*k-m; while(k--) { max+=a[i]; i-=m; } printf("%lld\n",max); } return 0; }
全部评论
(0) 回帖