中位数
时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
给出长度为nn的数组a1,a2,...,ana1,a2,...,an,做确切地kk次操作,每次操作选择两个不同的正整数i,ji,j使得ai=ai+ajai=ai+aj,并将ajaj从数组中删除。
kk次操作后序列的中位数最小可以是多少?
中位数:一个长度为mm的序列,它的中位数是将这mm数升序排列后第⌊m+12⌋⌊2m+1⌋个数。
输入描述:
输入包含TT组测试用例,第一行一个整数TT
每组测试用例第一行两个整数n,kn,k
每组测试用例第二行nn个整数a1 a2 ... ana1 a2 ... an
输出描述:
输出TT行第ii行为第ii组测试用例的答案。
示例1
输入
复制
1 5 1 4 3 5 1 2
输出
复制
2
备注:
1≤T≤5,1≤ai≤200000,2≤n≤200000,1≤k<n1≤T≤5,1≤ai≤200000,2≤n≤200000,1≤k<n
#include<iostream>
#include<cstring>
#include<cmath>
#include <algorithm>
#include<cstdio>
using namespace std;
const int maxn=1e6+10;
int a[maxn];
void solve(){
int n,k;
cin>>n>>k;
long long sum=0;
for(int i=1;i<=n;i++) cin>>a[i],sum+=a[i];
sort(a+1,a+n+1);
if(k==n-1) cout<<sum<<endl;
else{
int id;
id=n-k;
cout<<a[(id+1)/2]<<endl;
}
}
int main(){
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}

253



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



