AcWing
104. 货仓选址
对于两家商店和一个货仓,有两种情况:
- 货仓在两家商店之间(包括边界),此时货仓到两个商店的距离之和恰好就是两个商店的距离;
- 货仓在两家商店的左边或者右边,此时货仓到两个商店的距离之和一定大于两个商店之间的距离。
所以我们总是希望货仓的选址尽可能在多个商店的中间位置,这样的货仓到商店的总距离就是最小的。
对于本题,只需要给商店的坐标排序,取中位数,即为货仓的选址。再计算货仓到所有商店的距离总和。
#include <bits/stdc++.h>
using namespace std;
int n;
const int N = 100010;
int a[N];
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n;
for(int i = 0; i <= n - 1; i ++) cin >> a[i];
sort(a, a + n);
int mid = (n - 1) / 2;
int res = 0;
for(int i = 0; i <= n - 1; i ++) res += abs(a[mid] - a[i]);
cout << res;
return 0;
}