题目描述
在一条数轴上有 �N 家商店,它们的坐标分别为 �1A1∼��AN。
现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。
为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。
输入格式
第一行输入整数 �N。
第二行 �N个整数 �1A1∼��AN。
输出格式
输出一个整数,表示距离之和的最小值。
样例
输入数据 1
4
6 2 9 1
Copy
输出数据 1
12
Copy
数据范围
1≤�≤1000001≤N≤100000
0≤��≤400000≤Ai≤40000
分析:
x为n个数的中位数的时候距离和取最小
关于求中位数,先将数据递增排序,当n为奇数个,中位数为中间位置的数,n为偶数时,中位数为中间两个数的平均值
代码:
#include<bits/stdc++.h> //万能头文件
using namespace std;
const int N=100010;
int a[N]; //商店位置
int sum; //用于存坐标
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n); //从小到大排序
int x=a[n/2]; //取中间位置 由于int型自动取整,所以只需要下标为n/2即可
for(int i=0;i<n;i++)
sum+=abs(a[i]-x); //绝对值距离之和
cout<<sum<<endl;
return 0;
}