[2002年NOIP提高组] 均分纸牌
2024-09-08 17:30:57
有 N 堆纸牌,编号分别为 1,2,…, N。每堆上有若干张,但纸牌总数必为 N 的倍数。可以在任一堆上取若于张纸牌,然后移动。
移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。
现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。
例如 N=4,4 堆纸牌数分别为:
① 9 ② 8 ③ 17 ④ 6
移动3次可达到目的:
从 ③ 取 4 张牌放到 ④ (9 8 13 10) -> 从 ③ 取 3 张牌放到 ②(9 11 10 10)-> 从 ② 取 1 张牌放到①(10 10 10 10)。
移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。
现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。
例如 N=4,4 堆纸牌数分别为:
① 9 ② 8 ③ 17 ④ 6
移动3次可达到目的:
从 ③ 取 4 张牌放到 ④ (9 8 13 10) -> 从 ③ 取 3 张牌放到 ②(9 11 10 10)-> 从 ② 取 1 张牌放到①(10 10 10 10)。
输入
N(N 堆纸牌,1 <= N <= 100)
A1 A2 … An (N 堆纸牌,每堆纸牌初始数,l<= Ai <=10000)
A1 A2 … An (N 堆纸牌,每堆纸牌初始数,l<= Ai <=10000)
输出
所有堆均达到相等时的最少移动次数。
样例输入
4
9 8 17 6
样例输出
3
#include<iostream>
//贪心模拟
using namespace std; int N,G,S,A,P,CAD[1000]; {
cin>>N;
for(int i=1;i<=N;++i)
{
cin>>CAD[i];
S+=CAD[i];
}
A=S/N; for(int i=1;i<N;++i)
{
G=A-CAD[i];
if(G!=0)
{
P++;
CAD[i+1]-=G;
CAD[i]+=G;
}
} cout<<P;
return 0;
}
最新文章
- 显示或隐藏div
- Xamarin.Android中使用ResideMenu实现侧滑菜单
- 编解码-java序列化
- dbutils中实现数据的增删改查的方法,反射常用的方法,绝对路径的写法(杂记)
- django上传文件
- iOS开发之静态库(五)—— 图片、界面xib等资源文件封装到静态框架framework
- UIImage 调整图片大小
- ci 基础知识
- iOS应用架构浅谈
- EditText 双击才能获取点击事件
- BZOJ 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐( LIS )
- 慎用MonthsBetweent和MonthSpan
- linux查看CPU和内存信息
- js url编码函数
- FIR滤波器的实现方法(转)
- eclipse版本选择
- 玩一玩基于Token的 自定义身份认证+权限管理
- java记事本开发
- Docker数据卷Volume实现文件共享、数据迁移备份(三)--技术流ken
- Vue编写的todolist小例子
热门文章
- 优化多if和else语句
- 题解 UVA10859 【Placing Lampposts】
- Win10打开Autodesk软件时提示“管理员已阻止你运行此应用”
- JAVA集合框架特征介绍
- [转]C#的反射
- raise EOFError(";Compressed file ended before the "; EOFError: Compressed file ended before the end-of-stream marker was reached
- 解决adb devices无法连接各种模拟器
- 第三周day1
- @Component类相互引用的加载顺序
- 从零搭建hadoop集群之安装虚拟机