中位数
(考时脑壳抽了
思路其实很简单
容易知道最终序列长度为
如果不操作,最小的中位数,即为位置为
我们把删去的数全都往中位数右边的数加即可,中位数不变 的序列中位数最小值 就是位置
如果,原序列和即为所求
记得排序(
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int t;const int maxn=2e5+10; int n,k; int m[maxn]; int main(){ cin>>t; while(t--){ cin>>n>>k;long long ans=0; for(int i=1;i<=n;++i) cin>>m[i],ans+=m[i]; sort(m+1,m+1+n); if(k==n-1) cout<<ans<<endl; else cout<<m[(n-k+1)/2]<<endl; }return 0; }
(蒟蒻只能写这道题题解