#1535. 均分纸牌游戏
均分纸牌游戏
故事背景
在一个纸牌游戏中,玩家需要将几堆纸牌均分。每堆纸牌的数量不同,但总数量是堆数的倍数。玩家可以在相邻的堆之间移动纸牌,每次移动可以将任意数量的纸牌从一堆移动到相邻的另一堆。作为游戏的设计者,你需要计算出最少需要多少次移动才能使每堆纸牌的数量相同。
题目描述
有 N 堆纸牌,编号分别为 1, 2, …, N 。每堆上有若干张纸牌,但纸牌总数必为 N 的倍数。可以在任一堆上取若干张纸牌,然后移动。移牌规则为:在编号为 1 的堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。
现在要求找出一种移动方法,用最少的移动次数使每堆上的纸牌数都一样多。
输入格式
第一行输入一个整数 N ( ),表示纸牌的堆数。
第二行输入 N 个整数,表示每堆纸牌的数量。
输出格式
输出一个整数,表示最少的移动次数。
样例输入 1
4
9 8 17 6
样例输出 1
3
样例输入 2
5
1 2 3 4 5
样例输出 2
3
样例输入 3
3
4 4 4
样例输出 3
0
提示
- 这是一个经典的均分纸牌问题,贪心算法可以得到最优解
- 考虑每堆纸牌与平均数的差值,从左到右依次处理
- 注意处理负数的情况,即需要从右边的堆中拿纸牌的情况
- 移动次数的计算方法:每一步处理的差值的绝对值的总和