货仓选址
题目描述
在一条数轴上有 N N N 家商店,它们的坐标分别为 A 1 ∼ A N A_1 \sim A_N A1∼AN。
现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。
为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。
输入格式
第一行输入整数 N N N。
第二行 N N N 个整数 A 1 ∼ A N A_1 \sim A_N A1∼AN。
输出格式
输出一个整数,表示距离之和的最小值。
样例 #1
样例输入 #1
4
6 2 9 1
样例输出 #1
12
提示
数据保证, 1 ≤ N ≤ 100000 1 \le N \le 100000 1≤N≤100000, 0 ≤ A i ≤ 40000 0 \le A_i \le 40000 0≤Ai≤40000。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N=100010;
int a[N];
long long res;
int main(){
int n;cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+n+1);
int t=n/2;
for(int i=1;i<=n;i++)res+=abs(a[i]-a[t]);
cout<<res;
return 0;
}
**中位数的性质:
• 中位数是数据集中排序后位于中间的那个数。当数据集的元素数量为奇数时,中位数是正中间的那个数;当元素数量为偶数时,中位数是正中间两个数的平均值。
• 中位数最小化了绝对偏差的和,即 ∑∣xi−m∣\sum |x_i - m|∑∣xi−m∣,其中 mmm 是中位数。因此,中位数作为货仓的位置可以确保从货仓到所有商店的距离之和最小。
**