Sol.CF1037B

发布时间 2023-09-12 19:30:29作者: JacoAwA

又是随机跳题跳到的,再来写一篇题解。

不难发现又是一道用贪心解决的问题。

首先先对序列进行排序。

然后发现题目分为以下三种情况(\(mid\) 为中位数,当前中位数为 \(s\))

  • \(s=mid\) 输出特判即可。

  • \(s>mid\) 在序列的左边只要找到比 \(s\) 大的就累加他们的差进答案。

  • \(s<mid\) 在序列的右边只要找到比 \(s\) 大的就累加他们的差进答案。

核心代码如下

if(a[(n+1)/2]>mid){//s > mid
	for(int i=1;i<=(n+1)/2;i++){
		if(a[i]>mid)ans+=a[i]-mid;//累加他们的差
	}
} 
if(a[(n+1)/2]<mid){//s < mid
	for(int i=(n+1)/2;i<=n;i++){
		if(a[i]<mid)ans+=mid-a[i];//累加他们的差
	}
}