【題解】 HDU 2083 簡易版之最短距離

目錄

題目描述

題意分析

AC代碼


題目描述

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Problem 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

 

題意分析

題意:與HDU 1173 有些像,這是一維數組中,於數軸中找到一個點使所有的數組元素整體距離最短。

            即選取數組中的中位數即可。

 

AC代碼

#include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
#define MAXN 10005
using namespace std;

int x[MAXN];
int main()
{
    int n,m,i,p;
    long long sum;
    scanf("%d",&m);
    while(m--)
    {
        sum=0;
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            cin>>x[i];
        }
        sort(x,x+n);
        p=x[ (n-1)/2 ];
        for(i=0;i<n;i++)
        {
            sum += abs(x[i]-p);
        }
        cout<<sum<<endl;
    }
    return 0;
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章