题目大意:给出一些点,找到一个位置使这个位置到所有的点的距离的和最短。
很明显,排序,找中位数。关于中位数:有n个从小到大的数,k=(n+1)/2,若n为奇数,k为中位数,若n为偶数,k为中间那两个数中左侧的数。在c语言中,数组以0开始,中位数可以表示为k=(n-1)/2。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <cstdio> 2 #include <cstdlib> 3 #include <algorithm> 4 using namespace std; 5 #define MAXN 500+10 6 7 int a[MAXN]; 8 9 int main() 10 { 11 #ifdef LOCAL 12 freopen("in", "r", stdin); 13 #endif 14 int T; 15 scanf("%d", &T); 16 while (T--) 17 { 18 int n; 19 scanf("%d", &n); 20 for (int i = 0; i < n; i++) 21 scanf("%d", &a[i]); 22 sort(a, a+n); 23 int median = (n-1) / 2; 24 int sum = 0; 25 for (int i = 0; i < n; i++) 26 sum += abs(a[i] - a[median]); 27 printf("%d ", sum); 28 } 29 return 0; 30 }