http://www.gzmuoj.com/p/554
题目描述
在一条数轴上有 N 家商店,它们的坐标分别为 A1∼AN。
现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。
为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。
输入格式
第一行输入整数 N。
第二行 N个整数 A1∼AN。
输出格式
输出一个整数,表示距离之和的最小值。
样例
输入数据 1
4
6 2 9 1
Copy
输出数据 1
12
Copy
数据范围
1≤1000001≤N≤100000
0≤400000≤Ai≤40000
思路分析
要使货仓到每个商店的距离之和最近
可以把货仓放在距离所有商家的中间位置
但是如果将货仓放在距离中间位置最近的商家就可以减少一家送货的距离
距离可以用绝对值表示abs()
代码实现
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 50000;
int n;//商店数
int arr[N];//每家商店在数轴上的位置
long long sum=0;//路径之和最小
int cnt;
int main() {
cin >> n;
for (int i = 0; i <= n; i++) {
cin >> arr[i];
}
sort(arr, arr + n);
cnt = n / 2;
for (int i = 1; i < n; i++) {
sum += abs(arr[cnt] - arr[i]);
}
cout << sum;
return 0;
}