链接:http://codeforces.com/contest/1440/problem/B
题意:给n*k个数,分为k组每组n个数,求中位数的最大值。
思路:找到每组中位值所在的位置,前面用最小的数填充,剩下的位置按递增序列平均分k组,每组最前面的数就是中位数的最优解。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int a;
int main(){
int t;
cin>>t;
while(t--){
int n,k;
cin>>n>>k;
int id;
if(n&1) id=n/2+1;
else id=n/2;
ll sum=0,cnt=0;
for(int i=1;i<=n*k;i++){
cin>>a;
if((id-1)*k<i){
cnt++;
if(cnt==1)
sum+=a;
if(cnt+id>n)cnt=0;
}
}
cout<<sum<<endl;
}
}
博客给出一个链接,题意是将n*k个数分为k组,每组n个数,求中位数的最大值。思路为找到每组中位值位置,用最小数填充前面位置,剩下位置按递增序列平均分k组,每组最前面的数即为中位数最优解。
&spm=1001.2101.3001.5002&articleId=109757619&d=1&t=3&u=be633893f0f64d77913b3dc40923284b)
404

被折叠的 条评论
为什么被折叠?



