#9740. 均分纸牌
均分纸牌
版权信息
来源: 自定义题目 题目名称: 均分纸牌
任务总览表
- 任务名称: 均分纸牌
- 时间限制: 1秒
- 内存限制: 256MB
- 分数: 100
题目描述
有 n 堆纸牌(2 ≤ n ≤ 200),排成一行,编号分别为 1, 2, …, n。 已知每堆纸牌有一定的张数,且张数之和均为 n 的倍数。移动各堆中的任意张纸牌,使每堆的数量达到相同,且移动次数最少。 移动规则:每次可以移动任意的张数,第 1 堆可以移向第 2 堆,第 2 堆可以移向第 1 堆或第 3 堆,……第 n 堆只可以移向第 n-1 堆。
例如,当 n = 4 时:
堆号 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
张数 | 3 | 5 | 4 | 8 |
移动的方法有许多种,其中的一种方案: ① 第 2 堆向第 1 堆移动 2 张,成为:5 3 4 8 ② 第 4 堆向第 3 堆移动 3 张,成为:5 3 7 5 ③ 第 3 堆向第 2 堆移动 2 张,成为:5 5 5 5 经过三次移动,每堆都成为 5 张。
输入格式
第一行一个整数 n。 第二行 n 个整数,用空格分隔。
输出格式
一个整数,表示最少移动次数。
样例输入
4
3 5 4 8
样例输出
3
提示
- 输入数据保证每堆纸牌的张数之和是 n 的倍数。
题目分析
目标
- 通过模拟每堆纸牌的移动,计算最少的移动次数使得每堆纸牌的数量相同。
思路
- 计算每堆纸牌的均分数,即总张数除以 n。
- 从左到右遍历每堆纸牌,累积每堆纸牌与均分数的差值,然后把这个差值传递给下一堆纸牌,直到所有堆的纸牌数量相同。
- 需要统计移动次数,移动次数即为纸牌的差值的绝对值之和。
优化
- 使用累积差值的方式减少不必要的重复计算,通过递推的方式确保每次移动最小。
时间复杂度分析
- 遍历一次所有堆纸牌,计算每堆与均分数的差值,因此时间复杂度为 **O(n)**。
结论
通过累积差值的方式,我们能够高效地计算出最少的移动次数,确保每堆纸牌的数量最终相同。