【每日算法】基础算法——货仓选址(九十一)

题目内容

在一条数轴上有 N 家商店,它们的坐标分别为 A1~AN。

现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。

为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。

输入格式

第一行输入整数N。

第二行N个整数$A_1$~$A_N$。

输出格式

输出一个整数,表示距离之和的最小值。

数据范围

1≤N≤100000 ,
0≤$A_i$≤40000

输入样例

4
6 2 9 1

输出样例

12

题解

根据题,可列以下式子
res = min{|a1-x|+|a2-x|+|a3-x|+…+|an-x|}
若n为奇数,则x应在其中位数设立货仓
若n为偶数,则x应在中间两个数中间设立货仓

代码

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 100010;

int n;
int a[N];

int main(){
cin >> n;
for(int i = 0;i<n;i++) cin >> a[i];
sort(a,a+n);
int res = 0;
for(int i = 0;i<n;i++)res+=abs(a[i]-a[n/2]);
cout<<res<<endl;
return 0;
}
Author: Frederic Niu
Link: https://www.fredericniu.cn/2021/03/02/【每日算法】基础算法——货仓选址(九十一)/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
我的公众号