条形均分纸牌
题目大意:
给定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−(a1−m),a2=a2+(a1−m),
即从第一堆纸牌中拿走(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+(m−a1),a2=</