104 货仓选址
一、题目描述
输入样例:
4
6 2 9 1
输出样例:
12
二.问题思路
距离之和最小的货仓坐标即将货仓建在所有商店坐标的中位数上,这里要用到绝对值不等式 ∣ x − a ∣ + ∣ x − b ∣ ≥ ∣ a − b ∣ \ |x-a|+|x-b|\geq|a-b| ∣x−a∣+∣x−b∣≥∣a−b∣ 我们首先假设只有两个商店坐标为a和b,当把仓库建在a和b中间时,仓库距离两个商店的路程和才最小(可以自己画个图很容易证明),满足上式等号,当有n个商店时,我们将商店两两分组,( a 1 \ a_1 a1和 a n \ a_n an一组, a 2 \ a_2 a2和 a n − 1 \ a_{n-1} an−1一组……),只有当货仓建在 a n 2 \ a_{n \over 2} a2n 处时才能满足所以组都取等号(n为奇数偶数都可以表示为 n 2 \ n \over 2 2 n),所以我们只需将所有地址进行重新排序,然后取中位数即为货仓的地址。
代码如下(往后尽量都c++):
#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
int a[100001];
int main()
{
cin>>n;
for(int i=0;i<n;i++)cin>>a[i];
sort(a,a+n);
for(int i=0;i<n;i++)m+=abs(a[i]-a[n/2]);
cout<<m<<endl;
return 0;
}
“一个菜鸡的自我养成”
y总yyds