hdu - 2083 - 简易版之最短距离
找到中位数 , 根据对称性 , 当中位数需要两个数取中值的时候不需要取 , 只需要其中的任意一个数几个 例如四个数 1 , 2 , 3 , 4 . 这四个数 , 其中的 2 和 3 都可以 .
然后求 该点到所有点的 题目要求 解之和 就OK了
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<iostream> 5 #include<algorithm> 6 #include<queue> 7 #include<vector> 8 #include<set> 9 #include<stack> 10 #include<string> 11 #include<sstream> 12 #include<map> 13 #include<cctype> 14 #include<limits.h> 15 using namespace std; 16 int a[505]; 17 int main() 18 { 19 int t,n; 20 scanf("%d",&t); 21 while(t--) 22 { 23 scanf("%d",&n); 24 for(int i=0;i<n;i++) 25 { 26 scanf("%d",&a[i]); 27 } 28 sort(a,a+n); 29 int aver=a[n/2],sum=0; 30 for(int i=0;i<n;i++) 31 { 32 sum+=abs(a[i]-aver); 33 } 34 printf("%d\n",sum); 35 } 36 return 0; 37 }