P1031 [NOIP2002 提高组] 均分纸牌
P1031 [NOIP2002 提高组] 均分纸牌
题目
有
移牌规则为:在编号为
现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。
例如
移动
- 从第三堆取
张牌放到第四堆,此时每堆纸牌数分别为 。 - 从第三堆取
张牌放到第二堆,此时每堆纸牌数分别为 。 - 从第二堆取
张牌放到第一堆,此时每堆纸牌数分别为 。
输入
第一行共一个整数
第二行共
输出
共一行,即所有堆均达到相等时的最少移动次数。
样例
输入
4
9 8 17 6
输出
3
提示
对于
思路
题目要求构造最少的移动次数使得每堆纸牌数目相等,比较容易想到先求出
用一种更直观的数字描述,即:每个位置的数减去平均值。例如
通过动手模拟这个过程非常容易分析出,每一个位置需要向右边借的个数为此时前缀和的值。一旦当前位置余留
代码
#include <bits/stdc++.h>
using namespace std;
int n, a[110], cnt, sum, avg;
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i ++ )
{
scanf("%d", &a[i]);
sum += a[i];
}
avg = sum / n;
for (int i = 1; i <= n; i ++ )
a[i] -= avg;
for (int i = 1; i < n; i ++ )
{
if (a[i] == 0)
continue;
else
{
a[i + 1] += a[i];
cnt ++;
}
}
cout << cnt << '\n';
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】