均分纸牌和环形均分纸牌问题

条形均分纸牌

题目大意:
给定n堆纸牌,每一堆的纸牌个数为ai,你可以从一堆中取出一张纸牌放到其前一堆(ai = ai-1 , ai-1 = ai-1+1)或者放到其后一堆(ai = ai-1, ai+1 = ai+1 +1),询问最少的操作次数使得纸牌均分?

思路:
设 sum = a数组的总和
1.首先判断无解的情况,sum不能被n整除,即sum%n != 0
2.有解的情况,即sum%n == 0,设m = sum/n
那么我们的目标就是

a1,a2,a3 ... an => m,m,m ... m

首先考虑第一个人

如果a1 > m 那么为了使a1 => m ,需要

a 1 = a 1 − ( a 1 − m ) , a 2 = a 2 + ( a 1 − m ) a1 = a1 - (a1-m),a2 = a2+(a1-m) a1=a1(a1m),a2=a2+(a1m)

即从第一堆纸牌中拿走(a1-m)张纸牌,放到第2堆纸牌中

如果a1 <= m 那么同理为了使a1 => m, 需要

a 1 = a 1 + ( m − a 1 ) , a 2 = a 2 + ( m − a 1 ) a1 = a1 + (m-a1),a2 = a2 +(m-a1) a1=a1+(ma1),a2=</

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值