首先,如果有某序列 a i a_i ai,则 i = 1 n a i k \sum_{i=1}^n|a_i-k| i=1naik取最小值时,k为 a i a_i ai的中位数。(因为如果是pos,则pos向靠近中位数的位置移动能更小),这个性质也能dp

有n个人站成一排,每个人有 a i a_i ai张纸牌,求最小移动次数使得每个人纸牌数一样,一张纸牌交给旁边的人记为一次移动。
如果tot是n的倍数,则有解,设t=tot/n
遍历一遍,对于第i个人,ans+=abs(a[i]-t),a[i+1]-=t-a[i]。
也就是: a n s = a 1 t + a 2 + a 1 2 t + a 3 + a 2 + a 1 3 t + + i = 1 n a i n t ans=|a_1-t|+|a_2+a_1-2t|+|a_3+a_2+a_1-3t|+\dots+|\sum_{i=1}^na_i-nt| ans=a1t+a2+a12t+a3+a2+a13t++i=1naint
如果令 s k = ( i = 1 k a i ) k t = i = 1 k ( a i t ) s_k=(\sum_{i=1}^ka_i)-kt=\sum_{i=1}^k(a_i-t) sk=(i=1kai)kt=i=1k(ait)
a n s = i = 1 n s i ans=\sum_{i=1}^n |s_i| ans=i=1nsi
如果 b i = a i t b_i=a_i-t bi=ait,答案就是b的n个前缀和的绝对值之和。

如果是n个人站成一圈,那么,必然有两个人之间是没有交换的,将这两个人断开,变成一条链,假设在位置p和p+1之间断开,且s是原序列的前缀和,则新的前缀和从p+1处开始:
s p + 1 s p |s_{p+1}-s_p| sp+1sp
s p + 2 s p |s_{p+2}-s_p| sp+2sp
\dots
s n s p |s_n-s_p| snsp
s n + s 1 s p |s_n+s_1-s_p| sn+s1sp
\dots
s n + s p 1 s p |s_n+s_{p-1}-s_p| sn+sp1sp
s n + s p s p |s_n+s_{p}-s_p| sn+spsp
如果s是b的前缀和,则 s n = 0 s_n=0 sn=0
a n s = i = 1 n s i s p ans=\sum_{i=1}^n|s_i-s_p| ans=i=1nsisp,欲使ans最小, s p s_p sp为s的中位数

有n个人,第i个人站在 x i x_i xi的位置,求使他们站成连续的一列的最小花费。
显然,每个人的相对位置不变,设最终他们站在点a、a+1、… a+n-1点,则花费
a n s = i = 1 n x i ( a + i 1 ) = i = 1 n ( x i i + 1 ) a ans=\sum_{i=1}^n |x_i-(a+i-1)|=\sum_{i=1}^n |(x_i-i+1)-a| ans=i=1nxi(a+i1)=i=1n(xii+1)a,所以a是序列:
b i = x i i 1 b_i=x_i-i-1 bi=xii1的中位数。