0x05 排序 例题 P10452 货仓选址

题目

luogu.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\) 的奇偶性,统一加一再下取整。

总结归纳

posted @ 2025-08-03 10:19  枯骨崖烟  阅读(13)  评论(0)    收藏  举报