ACWing104.貨倉選址
阿新 • • 發佈:2021-01-18
原題連結
本篇參考規整自yxc大佬講解視訊題解
題目描述
在一條數軸上有 N 家商店,它們的座標分別為 A1 ~ An。
現在需要在數軸上建立一家貨倉,每天清晨,從貨倉到每家商店都要運送一車商品。
為了提高效率,求把貨倉建在何處,可以使得貨倉到每家商店的距離之和最小。
輸入格式
第一行輸入整數N。
第二行N個整數A1 ~ An。
輸出格式
輸出一個整數,表示距離之和的最小值。
資料範圍
1≤N≤100000,
0≤Ai≤40000
輸入樣例:
4
6 2 9 1
輸出樣例:
12
排序+中位數
設在倉庫左邊的所有點,到倉庫的距離之和為p,右邊的距離之和則為q,那麼我們就必須讓p+q的值儘量小。 當倉庫向左移動的話,p會減少x,但是q會增加n−x,所以說當為倉庫中位數的時候,p+q最小。
絕對值不等式:| x - a | + | x - b | >= | a - b |
Java程式碼
import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int []a = new int [n];
for(int i=0;i<n;i++) {
a[i] = sc.nextInt();
}
Arrays.sort(a);
int ans = 0;
for(int i=0;i<n;i++) {
ans+=Math.abs(a[i]-a[n/2]);
}
System.out.println(ans);
}
}
若將 abs(a[i] - a[n >> 1]) 改為 abs(a[i] - a[i >> 1]) 也可以 AC
注意這並不是資料的鍋,我們可以證明排序之後,有