0x05 排序 例题 P10452 货仓选址
题目
题意建模
中位数
算法分析
怎么卡到我了?
回顾一下我想这个题的思路:
- 首先排序,因为本题与绝对位置无关,只与相对位置有关。所以不妨升序排序;
- 然后手动模拟样例,发现越往中间走,距离和越小。这是一种感性的直觉,但是无法严谨证明。
后来,看了视频,知道这是排序算法的应用,为中位数。这就是性质:中位数的位置到其它所有点总距离之和最小。
参考代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N],n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
int ans=0;
for(int i=1;i<=n;i++)
{
if(i!=(n+1)/2) ans+=abs(a[i]-a[(n+1)/2]);
}
cout<<ans<<endl;
return 0;
}
细节实现
无论 \(n\) 的奇偶性,统一加一再下取整。

浙公网安备 33010602011771号