1. 程式人生 > >HDU 2083 簡易版之最短距離

HDU 2083 簡易版之最短距離

輸入 return ble 最終 ava clas itl align ring

簡易版之最短距離

Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 20196 Accepted Submission(s): 9150


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 分析: 需要找一個點,到所有的點的距離最短 那麽奇數可以找最中間的那一個,偶數找中間二個點的之間任意一個點為中心點,簡單畫一下就可以看出來 代碼如下:
#include <stdio.h>
#include 
<algorithm> #include <iostream> #include <string.h> #include <queue> #include <cmath> #include <vector> #include <map> using namespace std; int a[550]; int main() { int t,n,ans; scanf("%d",&t); while(t--) { ans=0; scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); for(int i=0;i<n;i++) ans+=abs(a[n/2]-a[i]); cout<<ans<<endl; } return 0; }

HDU 2083 簡易版之最短距離