题解
首先应该想到,同学们会被划分成$gcd(n,k+1)$个集合,同一个集合内的同学之间才能互相交换硬币。对每个集合,问题被化简成如下情况。
$\require{AMScd}$
$$
\begin{CD}
a_0 @>x_0>> a_1\\
@A x_3 A A @VV x_1 V\\
a_3 @<<x_2< a_2
\end{CD}
$$
其中$x$表示按箭头方向传递硬币的数量,为负代表按与箭头相反的方向传递硬币。
环状方程问题应想到当确定一个变量时,其他所有变量都可得出
设$x_0$为常量,$avg$为每个人最后应拥有的硬币
得出方程
$$
a_1+x_0-x_1=avg \\ x_1=-avg+a_1+x_0
$$
$$
a_2+x_1-x_2=avg
$$
带入$x_1$
$$
x_2=-2avg+a_1+a_2+x_0
$$
以此类推得到公式
$$x_i=-i*avg+\sum_{j=1}^i a_j+x_0 $$
答案需要求总移动次数 $\sum_{i=0}^{n-1}|x_i|$
而
$$
|x_i|=|i*avg-\sum_{j=1}^i a_i-x_0|$$
相当于在数轴上求一点 $x_0$ 使其到各点 $i*avg-\sum_{j=1}^ia_i$ 的距离之和最小
排序之后求中位数即可