题目链接: 点这里
假设总距离为S
地点为P, P的左边有a个商店, 右边有b个商店, 那么将S向右移1个单位, 那么距离更新为S + (a - b), 如果使S增大, 那么a > b, 因此将P不断右移, 当 a==b时, S达到最大值, 其实就是找到中位数即可
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, a;
vector<int> arr;
cin >> n;
while (n--) {
cin >> a;
arr.push_back(a);
}
sort(arr.begin(), arr.end());
a = arr[arr.size() / 2];
int ans = 0;
for (int i = 0; i < arr.size(); i++) {
ans += arr[i] > a ? arr[i] - a : a - arr[i];
}
cout << ans;
return 0;
}