环形均分纸牌问题

环形均分纸牌问题

问题:给定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=ni=1na[i]

我们规定 i i i i − 1 i-1 i1传递 x x x,记为 i − 1 i-1 i1 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. a1aa2aa3aa4aana=xnx1=x1x2=x2x3=x3x4=xn1xn

那么移项,可以得到:

{ 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=xna1+ax1a2+ax2a3+axn1an+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=xnj=1iaj+ia

最终会有 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)ia,则原式化为 x i = x n − s i x_i=x_n-s_i xi=xnsi

因为我们最终目标是要求 min ⁡ { ∑ i = 1 n ∣ x i ∣ } \min\left\lbrace\sum_{i=1}^n|x_i|\right\rbrace min{i=1nxi}

原式= min ⁡ { ∑ i = 1 n ∣ x n − s i ∣ } \min\left\lbrace\sum_{i=1}^n|x_n-s_i|\right\rbrace min{i=1nxnsi}

此时因为我们的 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值