环形均分纸牌问题
问题:给定n个整数,呈环形排列,每个数可以往两个相邻的数传递(每次至少1),最终要使得 n n n个数相等,求传递的数的最小值
无解条件很显然: n n n不能整除 ∑ i = 1 n a [ i ] \sum_{i=1}^na[i] ∑i=1na[i]
现在规定有解,设 a ‾ = ∑ i = 1 n a [ i ] n \overline{a}=\frac{\sum_{i=1}^na[i]}{n} a=n∑i=1na[i]
我们规定 i i i向 i − 1 i-1 i−1传递 x x x,记为 i − 1 i-1 i−1向 i i i传递 − x -x −x,这时候我们就可以把整个传递过程规定为单方向传递
设对于 i i i,则 i i i传递给 i + 1 i+1 i+1的数为 x i x_{i} xi,特别的,设 n n n传递给 1 1 1
那么可以得到:
{ a 1 − a ‾ = x n − x 1 a 2 − a ‾ = x 1 − x 2 a 3 − a ‾ = x 2 − x 3 a 4 − a ‾ = x 3 − x 4 … … a n − a ‾ = x n − 1 − x n \left\{ \begin{aligned} a_1-\overline{a}&=x_n-x_1\\ a_2-\overline{a}&=x_1-x_2\\ a_3-\overline{a}&=x_2-x_3\\ a_4-\overline{a}&=x_3-x_4\\ &……\\ a_n-\overline{a}&=x_{n-1}-x_n\\ \end{aligned} \right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧a1−aa2−aa3−aa4−aan−a=xn−x1=x1−x2=x2−x3=x3−x4……=xn−1−xn
那么移项,可以得到:
{ x 1 = x n − a 1 + a ‾ x 2 = x 1 − a 2 + a ‾ x 3 = x 2 − a 3 + a ‾ … … x n = x n − 1 − a n + a ‾ \left\{ \begin{aligned} x_1=&x_n-a_1+\overline{a}\\ x_2=&x_1-a_2+\overline{a}\\ x_3=&x_2-a_3+\overline{a}\\ &……\\ x_n=&x_{n-1}-a_n+\overline{a}\\ \end{aligned} \right. ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧x1=x2=x3=xn=xn−a1+ax1−a2+ax2−a3+a……xn−1−an+a
将后式带入前式,先不考虑 x n x_n xn,有
x i = x n − ∑ j = 1 i a j + i ⋅ a ‾ x_i=x_n-\sum_{j=1}^ia_j+i·\overline{a} xi=xn−j=1∑iaj+i⋅a
最终会有 x n = x n x_n=x_n xn=xn
那么如果我们设 s i = ( ∑ j = 1 i a j ) − i ⋅ a ‾ s_i=\left(\sum_{j=1}^ia_j\right)-i·\overline{a} si=(∑j=1iaj)−i⋅a,则原式化为 x i = x n − s i x_i=x_n-s_i xi=xn−si
因为我们最终目标是要求 min { ∑ i = 1 n ∣ x i ∣ } \min\left\lbrace\sum_{i=1}^n|x_i|\right\rbrace min{∑i=1n∣xi∣}
原式= min { ∑ i = 1 n ∣ x n − s i ∣ } \min\left\lbrace\sum_{i=1}^n|x_n-s_i|\right\rbrace min{∑i=1n∣xn−si∣}
此时因为我们的 s s s的值都可以 O ( n ) O(n) O(n)预处理出来,那么我们只需要求出 x n x_n xn在何值的时候上式最小即可
那就是 s s s的中位数了
此时, x n x_n xn的值知道之后,就可以回带求出所有的 x x x值