又是随机跳题跳到的,再来写一篇题解。
不难发现又是一道用贪心解决的问题。
首先先对序列进行排序。
然后发现题目分为以下三种情况(\(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];//累加他们的差
}
}
标签:累加,mid,中位数,Sol,序列,CF1037B
From: https://www.cnblogs.com/JacoAwA/p/CF1037B.html