简易版之最短距离
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 22206 Accepted Submission(s): 9984
Problem Description
寒假的时候,ACBOY要去拜访很多朋友,恰巧他所有朋友的家都处在坐标平面的X轴上。ACBOY可以任意选择一个朋友的家开始访问,但是每次访问后他都必须回到出发点,然后才能去访问下一个朋友。
比如有4个朋友,对应的X轴坐标分别为1, 2, 3, 4。当ACBOY选择坐标为2的点做为出发点时,则他最终需要的时间为 |1-2|+|2-2|+|3-2|+|4-2| = 4。
现在给出N个朋友的坐标,那么ACBOY应该怎么走才会花费时间最少呢?
比如有4个朋友,对应的X轴坐标分别为1, 2, 3, 4。当ACBOY选择坐标为2的点做为出发点时,则他最终需要的时间为 |1-2|+|2-2|+|3-2|+|4-2| = 4。
现在给出N个朋友的坐标,那么ACBOY应该怎么走才会花费时间最少呢?
Input
输入首先是一个正整数M,表示M个测试实例。每个实例的输入有2行,首先是一个正整数N(N <= 500),表示有N个朋友,下一行是N个正整数,表示具体的坐标(所有数据均<=10000).
Output
对于每一个测试实例,请输出访问完所有朋友所花的最少时间,每个实例的输出占一行。
Sample Input
2
2
2 4
3
2 4 6
Sample Output
2
4
Source
1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 #include <string> 5 #include <string.h> 6 #include <cstring> 7 #include <stdio.h> 8 #define lowbit(x) x&(-x) 9 using namespace std; 10 const int maxn=500; 11 typedef long long ll; 12 int a[maxn]; 13 int minn[maxn]; 14 int main(){ 15 ios::sync_with_stdio(0); 16 int t; 17 cin>>t; 18 while(t--){ 19 int n; 20 memset(a,0,sizeof(a)); 21 memset(minn,0,sizeof(minn)); 22 cin>>n; 23 for(int i=0;i<n;i++) 24 cin>>a[i]; 25 for(int i=0;i<n;i++) 26 for(int j=0;j<n;j++){ 27 minn[i]+=abs(a[j]-a[i]); 28 } 29 sort(minn,minn+n); 30 printf("%d ",minn[0]); 31 } 32 33 return 0; 34 }