贝壳街上有很多家住户,小丁准备在该条街上开一家商店,请问,他的商店开在哪里,可以使得所有住户到商店的距离的总和是最小的。
本题中,假设该条街是一条笔直的街道,街道的起始位置标记为 0 ,已知每个住户离起点的距离。
本题要求的位置可以是街道中的任何一个位置,也可以和住户的位置是重叠的,如果有多个位置到所有住户的距离总和都是最小的,请输出可选位置的最大值。
输入的第一行是一个整数 T ,表示有 T 组测试数据。每组测试数据第一行是一个整数 N( 1≤N≤1000 )表示在贝壳街上共有 N 个住户。
接下来 N 行,每行一个整数 a[i](0≤a[i] ≤30000 )表示每个住户住所的位置,所有住户住所的位置均不相同。
我的思路是枚举商店所在的位置,并返回它与每个住户加起来的总值,但不知道为什么,只对了一组测试数据,望解答。
代码如下:
#include <bits/stdc++.h>
using namespace std;
int sum = INT_MAX, n, a[1001], wz;
int x(int i) {
int s = 0;
for (int j = 1; j <= n; j++) {
if (a[j] < i) s = s + i - a[j];
else s = s + a[j] - i;
}
return s;
}
int main() {
int t;
cin >> t;
while (t--) {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
sort(a + 1, a + n + 1);
for (int i = a[1]; i <= a[n]; i++) {
int k = x(i);
if (k <= sum) {
wz = i;
sum = k;
}
}
cout << wz << " " << sum << endl;
}
}