专栏文章
题解:P13759 Basketball
P13759题解参与者 4已保存评论 4
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mio96j3t
- 此快照首次捕获于
- 2025/12/02 15:25 3 个月前
- 此快照最后确认于
- 2025/12/02 15:25 3 个月前
算法:贪心
这道题其实说难不难,如果认真找规律了,基本上都能在 分钟内做完,甚至更短。
首先,因为是求最小,所以给它从小到大排个序。之后,我们会发现,要让 ( 表示中位数)最小,通过正确分组后, 其实就是 ( 表示第一组中的下标)。
具体过程如下:
当 时,对于序列 且 ,将它排序并分成两组:,每次从左边取 个(对于每一组,下标要从 取到中间),再从右边取 个,每组为 ,发现每一组的中位数是在左边取的最后一个数字,规律就是这么来的。
所以,代码就产生了:
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;
int a[N],n,m,c,ans;
signed main(){
cin>>n>>m;
for (int i=1; i<=n; i++){
cin>>a[i];
}
sort (a+1,a+1+n);
c=n/m/2+1; //第一组中位数的下标
for (int i=1; i<=m; i++){
ans+=a[c*i];
}
cout<<ans;
return 0;
}
总结:本道题就是这么轻松的搞定啦!但是我们平常做题时一定要认真仔细,动脑思考,不要粗心大意,这样才有效果。
相关推荐
评论
共 4 条评论,欢迎与作者交流。
正在加载评论...