AcWing 104. 货仓选址
原题链接
简单
数学问题,建在中位数位置上,则到各个货仓的的距离之和最小
C++ 代码
//一道数学问题,放在所有货仓的中间(中间的任何数)即可
//1,2,6,9 比如放在3位置上,3-1+3-2+6-3+9-3=2+1+3+6=12
#include<iostream>
using namespace std;
#include<bits/stdc++.h>
int n;
const int maxn=1e5+5;
int a[maxn];
int main(){
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n+1);
int temp=0;
if(n%2==0)
{
//取左边那个
temp=(a[n/2]+a[n/2+1])/2;
// temp=temp+1;
}
else{
temp=a[n/2+1];
}
int ret=0;
for(int i=1;i<=n;i++)
{
ret+=abs(a[i]-temp);
}
cout<<ret<<endl;
return 0;
}