大概意思可以描述为 求道到一条直线上n个点的距离和的最短距离。本题的重点在排序。这道题初中证明过利用绝对值的性质,当一个点在线段两端点之间时,这个点到两端点的距离之和最短,当线段上游n个点,如果为奇数个点,则,当该点与中间的点重合,距离最短,当有偶数个点是 在n/2 与n/2+1个点之间的点,到这n个点的距离之和最短!
文字描述太麻烦了,都怪小学语文没学好!
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
#define maxnum 505
int a[maxnum];
bool cmp(int a,int b)
{
return a<b;
}
int main()
{
int i,n,r;
cin>>n;
while(n--)
{
cin>>r;
for(i=0;i<r;i++)
cin>>a[i];
sort(a,a+r,cmp);
int sum=0;
int j=r-1;
i=0;
while(i<j)
{
sum+=a[j]-a[i];
j--;
i++;
}
cout<<sum<<endl;
}
return 0;
}