#1535. 均分纸牌游戏

均分纸牌游戏

故事背景

在一个纸牌游戏中,玩家需要将几堆纸牌均分。每堆纸牌的数量不同,但总数量是堆数的倍数。玩家可以在相邻的堆之间移动纸牌,每次移动可以将任意数量的纸牌从一堆移动到相邻的另一堆。作为游戏的设计者,你需要计算出最少需要多少次移动才能使每堆纸牌的数量相同。

题目描述

有 N 堆纸牌,编号分别为 1, 2, …, N 。每堆上有若干张纸牌,但纸牌总数必为 N 的倍数。可以在任一堆上取若干张纸牌,然后移动。移牌规则为:在编号为 1 的堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。

现在要求找出一种移动方法,用最少的移动次数使每堆上的纸牌数都一样多。

输入格式

第一行输入一个整数 N ( 1N1001 \leq N \leq 100 ),表示纸牌的堆数。

第二行输入 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

提示

  • 这是一个经典的均分纸牌问题,贪心算法可以得到最优解
  • 考虑每堆纸牌与平均数的差值,从左到右依次处理
  • 注意处理负数的情况,即需要从右边的堆中拿纸牌的情况
  • 移动次数的计算方法:每一步处理的差值的绝对值的总和