环形均分纸牌问题可链化的证明
环形均分纸牌问题可链化的证明
先来看一下什么是均分纸牌问题
均分纸牌问题
n 个人站成一排,每个人手里有\(A_i\)张纸牌,每次操作可以使一个人从相邻的人手里那一张纸牌,问使得所有人手里纸牌数相等的最少操作数?(数据保证有解)
对于均分纸牌问题,很显然可以贪心解决。
对于第一个人来说,只能从第二个人那里拿牌,如果他少于平均,那么必然要从第二个人那里拿足够的牌直到达到平均值,如果多于平均,则必然要把多余的牌送给第二个人。
如果用\(sum\)表示\(A\)的前缀和,\(ave\)为纸牌的均值(即最后每个手里的牌数),那么答案可以表示为
环形均分纸牌问题
环形均分纸牌问题,就是将 n 个人排成一圈,则第一个人可以和第 n 个人传递纸牌。
如果我们可以证明某两个人直接可以不用传递纸牌也能获得最优解,那么我们可以尝试断开每两个人之间的连接,然后使用非环形均分纸牌问题中的方法来求解。
网上很多解答都是在可链化的基础上推出了求中位数求解的结论,然而关于可链化(即可以将某两个人的连接断开而不影响最少操作次数)的证明问题却语焉不详。
实际上,想要通过枚举各种情况证明可链化是非常困难的,因为没有办法枚举所有情况。
这题更严谨的做法应当是假设\(X_i\) 表示第 \(i\) 个人向第\(i-1\) 个人传递了 \(X_i\) 张纸牌 (\(X_1\) 表示第一个向第 n 个),值为负表示反向。
操作次数就可以表示为 \(\sum^n_{i=1} |X_i|\)
由于传递后每个人的牌都为 \(ave\) ,所以可以列出一系列方程
用 \(X_1\) 表示 \(X_2,X_3\dots X_n\) 可得到
令 \(S_i = \sum^{i-1}_{j=1} (A_j-ave) \ \ \ \ \ 2\le i\le n\)
特别的,\(S_1=0\)
可得
操作次数可以表示为
那么原问题变成了求 \(X_1\) 的值使得上述求和最小,上述求和可以看作是求点到直线的距离。
-
先将 \(S\) 数组从小到大排序。
-
如果 n 为奇数,那么 \(X_1 = S_{n/2+1}\)
-
如果 n 为偶数,那么 \(X_1 \in [S_{n/2},S_{n/2+1}]\)
可以发现,不论 n 为奇数还是偶数,\(X_1\) 都可以取到\(S\) 数组中的某个值使得求和最小,因此存在某个 \(X_i = X_1 - S_i = 0\),即有两个人之间没有纸牌传递,因此这种解法实际上证明了环形均分纸牌问题的可链化。