104.货仓选址

原题链接: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;
}
原文地址:https://www.cnblogs.com/hnkjdx-ssf/p/14278492.html