在乙個數軸上有n
nn家商店,座標分別是a1∼
na_
a1∼n
,需要在數軸上建立乙個倉庫,使得所有商店到這個倉庫的距離總和最小。問這個倉庫應該建在何處,返回最小的距離總和。
輸入格式:
第一行輸入整數n
nn。第二行n
nn個整數a1∼
an
a_1\sim a_n
a1∼an
。輸出格式:
輸出乙個整數,表示距離之和的最小值。
資料範圍:
1 ≤n
≤100000
1\le n\le 100000
1≤n≤10
0000
0 ≤a
i≤
40000
0\le a_i\le 40000
0≤ai≤
4000
0 設倉庫建在x
xx這個位置,令f(x
)=∑∣
x−ai
∣f(x)=\sum |x-a_i|
f(x)=∑
∣x−a
i∣,那麼f′(
x)=∣
∣−∣∣
f'(x)=|\|
f′(x)=
∣∣−∣
∣,可以看出,當x
xx從−
∞-\infty
−∞到+
∞+\infty
+∞變化的時候,f』f』
f』由負到正,所以f(x
)f(x)
f(x)
先降後公升,而f(x
)f(x)
f(x)
取最小應當是在f′(
x)=0
f'(x)=0
f′(x)=
0的時候,即x
xx取中位數即可。求中位數可以用快速選擇演算法,參考**如下:
#include
using
namespace std;
const
int n =
100010
;int a[n]
;int
quick_select
(int l,
int r,
int idx)
}while
(i <= j);if
(idx <= j)
return
quick_select
(l, j, idx)
;else
if(idx >= i)
return
quick_select
(i, r, idx)
;else
return a[idx];}
intmain()
平均時間複雜度o(n
)o(n)
o(n)
,平均空間o
(logn
)o(\log n)
o(logn)。
AcWing 104 貨倉選址
題目描述 在一條數軸上有 n 家商店,它們的座標分別為 a1 an。現在需要在數軸上建立一家貨倉,每天清晨,從貨倉到每家商店都要運送一車商品。為了提高效率,求把貨倉建在何處,可以使得貨倉到每家商店的距離之和最小。輸入格式 第一行輸入整數n。第二行n個整數a1 an。輸出格式 輸出乙個整數,表示距離之...
AcWing 104 貨倉選址
在一條數軸上有 n 家商店,它們的座標分別為 a1 an。現在需要在數軸上建立一家貨倉,每天清晨,從貨倉到每家商店都要運送一車商品。為了提高效率,求把貨倉建在何處,可以使得貨倉到每家商店的距離之和最小。輸入格式 第一行輸入整數n。第二行n個整數a1 an。輸出格式 輸出乙個整數,表示距離之和的最小值...
AcWing 104 貨倉選址
在一條數軸上有 n 家商店,它們的座標分別為 a1 an。現在需要在數軸上建立一家貨倉,每天清晨,從貨倉到每家商店都要運送一車商品。為了提高效率,求把貨倉建在何處,可以使得貨倉到每家商店的距離之和最小。輸入格式 第一行輸入整數n。第二行n個整數a1 an。輸出格式 輸出乙個整數,表示距離之和的最小值...