MathLabs

第5题

nn 个人围坐成圈,共分配 nknk 枚硬币但不一定平均。一步是相邻两人之间转移一枚硬币。求一个用最少步数使每人硬币数相同的算法。
第 2/5 步:定义前缀和势能
X=∑i=1n−1∣∑j=1idj∣X=\sum_{i=1}^{n-1}\left|\sum_{j=1}^id_j\right|
详细分析

令 X=∑i=1n−1∣d1+⋯+di∣X=\sum_{i=1}^{n-1}|d_1+\cdots+d_i|。它为零当且仅当所有 did_i 为零。跨越 i,i+1i,i+1(i<ni<n)的移动只改变第 ii 个前缀和,所以使 XX 改变一单位。