簡易版之最短距離 hd 2083

q923714892發表於2020-04-06
Description
寒假的時候,ACBOY要去拜訪很多朋友,恰巧他所有朋友的家都處在座標平面的X軸上。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

 #include<stdio.h>
#include <algorithm>
using namespace std;
int main()
{
int n,a,i,j,sum,sam,c,d,e;
int b[550];
scanf("%d",&n);
while(n--)
{
sum=0;
sam=0;
scanf("%d",&a);
for(i=0;i<a;i++)
{
scanf("%d",&b[i]);
}
sort(b,b+a);
if(a%2!=0)
{
c=a/2;
for(i=0;i<a;i++)
sum=sum+abs(b[c]-b[i]);
printf("%d\n",sum);
}
if(a%2==0)
{
d=a/2;
e=a/2-1;
for(i=0;i<a;i++)
sum=sum+abs(b[d]-b[i]);
for(j=0;j<a;j++)
sam=sam+abs(b[e]-b[j]);
if(sum>sam)
printf("%d\n",sam);
else
printf("%d\n",sum);
}
}
return 0;
}


相關文章