1. 程式人生 > 其它 >ACWing104.貨倉選址

ACWing104.貨倉選址

技術標籤:排序絕對值不等式java演算法

原題連結

本篇參考規整自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

注意這並不是資料的鍋,我們可以證明排序之後,有
在這裡插入圖片描述

1


  1. 題目擴充套件:
    一維座標系擴充套件為二維,可以用三分法;
    AcWing3167. 星星還是樹.
    擴充套件為n維可以用模擬退火演算法。(不用掌握) ↩︎