洛谷P1031 均分纸牌(贪心)
题目描述
有N堆纸牌,编号分别为 1,2,…,N。1,2,…,N。1,2,…,N。每堆上有若干张,但纸牌总数必为NNN的倍数。可以在任一堆上取若干张纸牌,然后移动。
移牌规则为:在编号为111堆上取的纸牌,只能移到编号为222的堆上;在编号为NNN的堆上取的纸牌,只能移到编号为N−1N−1N−1的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。
现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。
例如N=4N=4N=4,444堆纸牌数分别为:
①9②8③17④6①9②8③17④6①9②8③17④6
移动3次可达到目的:
从 ③ 取44张牌放到 ④ (9,8,13,10)(9,8,13,10)(9,8,13,10)-> 从 ③ 取3张牌放到 ②(9,11,10,10)(9,11,10,10)(9,11,10,10)-> 从 ② 取1张牌放到①(10,10,10,10)(10,10,10,10)(10,10,10,10)。
输入格式
两行
第一行为:NNN(NNN 堆纸牌,1≤N≤1001≤N≤1001≤N≤100)
第二行为:A1,A2,…,AnA_1,A_2, … ,A_nA1,A2,…,An
(N堆纸牌,每堆纸牌初始数,1≤Ai≤100001≤A_i≤100001≤Ai≤10000)
输出格式
一行:即所有堆均达到相等时的最少移动次数。
输入输出样例
输入
4
9 8 17 6
输出
3
思路分析
因为纸牌是实物,不可能有负数,但我们抽象成数字后便不用考虑正负,所以题目可简化为:有 n 个数,相邻的可以互相增减同一个值a。问最小的增减步数使得 n 个数都相同
- 考虑最终每个数大小(求平均值)
- 从哪里开始增减?怎么增减?
随便找个例子,不难发现选择移动哪个纸牌堆对结果都没有影响,所以可以从左边第1个开始移动,某个牌堆增减的数,只能从右边的堆上相应减增。增减时直接把某个牌堆移动为平均值,先保证左边合法,从左到右扫一遍即可
AC的C++代码
#include<iostream>
#include<algorithm>
using namespace std;int main()
{int n,card[110],sum = 0,num=0;//num为移动次数cin >> n;for (int i = 0; i < n; i++){cin >> card[i];sum += card[i];}int av = sum / n; //求出平均纸牌的数量//开始移动for (int i = 0; i < n; i++){if (card[i] == av)continue;else{card[i + 1] += (card[i] - av);num++;}}cout << num;
}
洛谷P1031 均分纸牌(贪心)相关推荐
- 洛谷——P1031 均分纸牌
题目描述 有NN堆纸牌,编号分别为 1,2,-,N1,2,-,N.每堆上有若干张,但纸牌总数必为NN的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为11堆上取的纸牌,只能移到编号为 ...
- [NOIP2002] 提高组 洛谷P1031 均分纸牌
题目描述 有 N 堆纸牌,编号分别为 1,2,-, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 ...
- 洛谷 P1031 均分纸牌【交叉模拟】
题目描述 有 N 堆纸牌,编号分别为 1,2,-, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 ...
- Luogu P1031 均分纸牌(贪心)
P1031 均分纸牌 题目描述 有 N 堆纸牌,编号分别为 1,2,-, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌 ...
- 用贪心策略均分纸牌(洛谷P1031题题解,Java语言描述)
题目要求 P1031题目链接 分析 我们一定要知道的是average,这个average其实就是每堆牌最终一定要达到的情况. 想要更简单的结果,那就可以用贪心策略,从某一侧开始,逐一的补齐或天选,反正 ...
- 均分纸牌(洛谷-P1031)
题目描述 有 N 堆纸牌,编号分别为 1,2,-, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 ...
- P1031 均分纸牌(经典贪心)
题目描述 有N堆纸牌,编号分别为1,2,-,N.每堆上有若干张,但纸牌总数必为N的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为1堆上取的纸牌,只能移到编号为2的堆上:在编号为N的 ...
- P1031 均分纸牌
题目描述 有NN堆纸牌,编号分别为 1,2,-,N每堆上有若干张,但纸牌总数必为N的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为1堆上取的纸牌,只能移到编号为2的堆上:在编号为N ...
- 洛谷P1080-国王游戏-贪心+高精度
P1080-国王游戏 啊啊啊,刚才已经写了一次了,但是Edge浏览器不知道为什么卡住了,难受. 好吧,其实是一道可做题,分析得到的贪心策略就是就是将a * b小的放在前面(其他的懒得说了),主要还是要 ...
最新文章
- 1038 Recover the Smallest Number (30 分)【难度: 中 / 知识点: 贪心 思维】
- jenkins+pytest+allure接口自动化测试(windows环境)
- php 5.6 zend opcache,使用Zend OpCache 提高 PHP 5.5+ 性能
- 为什么PHP能够受到大家追捧和喜爱,又为什么饱受嘲讽?
- cacti+nagios整合(未成)
- difference softreference and weakreference
- HttpUtil工具类
- 移远BC95 NB-IoT模块串口发送数据到服务器
- 工业污染治理投资完成情况分析(2000—2019年)
- nfs挂载方式启动linux,飞凌OK6410挂载nfs启动步骤
- 在Ubuntu16-04版本上搭建离线免费地图osm(一)
- 收集了一下WINDDOWS VISTA密码破解的方法
- an error occurred while attempting to contact the server_cheney
- word指定页插入页码
- mssql数据库管理的简单介绍 (转 :kyle)
- 固态硬盘正确分区方法,好用的硬盘分区工具
- C# Tif格式转Jpg
- 帝国cms php序号,PHP_帝国cms常用标签汇总,判断会员是否登录? - phpStudy
- 问题 G: 向右看齐
- 2003系统服务器防域名报毒,【系统之家】木马病毒无孔不入 win 2003系统也要防木马...
热门文章
- XML与java的应用
- [转]Visual Studio 2005创建VC++智能设备项目失败的解决方法
- phpnow 更改mysql data文件夹路径
- 如何连接oracle 12c可插拔数据库
- 封装微信分享到朋友/朋友圈js
- Android App性能优化十技巧
- Java多线程、主线程等待所有子线程执行完毕、共享资源
- [C# 3.0 入门] [第一章 Lambda表达式] 第三节:Lambda与匿名方法的区别(日文翻译)...
- 【jQuery笔记Part3】03-jQuery项目:随机抽奖
- 【jQuery笔记Part3】01-jQuery-each遍历