原题链接:104.货仓选址
解题思路
把A[1]~A[N]
排序,设货仓建在 X 坐标处,X 左侧的商店有 P 家,右侧的商店有 Q 家。若 P < Q ,则把货仓的选址向右移动 1 单位距离,距离之和就会减小 Q - P。同理,若 P > Q ,则货仓的位置想左移动会使距离之和变小。当 P = Q 时为最优解。
因此货仓应该建在中位数处,即把 A 排序后,当 N 为奇数时,货仓建在 A[(N+1)/2] 处最优;当 N 为偶数时,货仓建在 A[N/2]~A[N/2+1] 之间的任何位置都是最优解。
样例代码
#include<bits/stdc++.h>
using namespace std;
const int N=100100;
int a[N],n,i,ans,sum;
int main()
{
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
sum=a[n/2+1];
for(i=1;i<=n;i++)
ans=ans+abs(a[i]-sum);
cout<<ans;
return 0;
}