题目描述

有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. 考虑最终每个数大小(求平均值)
  2. 从哪里开始增减?怎么增减?
    随便找个例子,不难发现选择移动哪个纸牌堆对结果都没有影响,所以可以从左边第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 均分纸牌(贪心)相关推荐

  1. 洛谷——P1031 均分纸牌

    题目描述 有NN堆纸牌,编号分别为 1,2,-,N1,2,-,N.每堆上有若干张,但纸牌总数必为NN的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为11堆上取的纸牌,只能移到编号为 ...

  2. [NOIP2002] 提高组 洛谷P1031 均分纸牌

    题目描述 有 N 堆纸牌,编号分别为 1,2,-, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 ...

  3. 洛谷 P1031 均分纸牌【交叉模拟】

    题目描述 有 N 堆纸牌,编号分别为 1,2,-, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 ...

  4. Luogu P1031 均分纸牌(贪心)

    P1031 均分纸牌 题目描述 有 N 堆纸牌,编号分别为 1,2,-, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌 ...

  5. 用贪心策略均分纸牌(洛谷P1031题题解,Java语言描述)

    题目要求 P1031题目链接 分析 我们一定要知道的是average,这个average其实就是每堆牌最终一定要达到的情况. 想要更简单的结果,那就可以用贪心策略,从某一侧开始,逐一的补齐或天选,反正 ...

  6. 均分纸牌(洛谷-P1031)

    题目描述 有 N 堆纸牌,编号分别为 1,2,-, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 ...

  7. P1031 均分纸牌(经典贪心)

    题目描述 有N堆纸牌,编号分别为1,2,-,N.每堆上有若干张,但纸牌总数必为N的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为1堆上取的纸牌,只能移到编号为2的堆上:在编号为N的 ...

  8. P1031 均分纸牌

    题目描述 有NN堆纸牌,编号分别为 1,2,-,N每堆上有若干张,但纸牌总数必为N的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为1堆上取的纸牌,只能移到编号为2的堆上:在编号为N ...

  9. 洛谷P1080-国王游戏-贪心+高精度

    P1080-国王游戏 啊啊啊,刚才已经写了一次了,但是Edge浏览器不知道为什么卡住了,难受. 好吧,其实是一道可做题,分析得到的贪心策略就是就是将a * b小的放在前面(其他的懒得说了),主要还是要 ...

最新文章

  1. 1038 Recover the Smallest Number (30 分)【难度: 中 / 知识点: 贪心 思维】
  2. jenkins+pytest+allure接口自动化测试(windows环境)
  3. php 5.6 zend opcache,使用Zend OpCache 提高 PHP 5.5+ 性能
  4. 为什么PHP能够受到大家追捧和喜爱,又为什么饱受嘲讽?
  5. cacti+nagios整合(未成)
  6. difference softreference and weakreference
  7. HttpUtil工具类
  8. 移远BC95 NB-IoT模块串口发送数据到服务器
  9. 工业污染治理投资完成情况分析(2000—2019年)
  10. nfs挂载方式启动linux,飞凌OK6410挂载nfs启动步骤
  11. 在Ubuntu16-04版本上搭建离线免费地图osm(一)
  12. 收集了一下WINDDOWS VISTA密码破解的方法
  13. an error occurred while attempting to contact the server_cheney
  14. word指定页插入页码
  15. mssql数据库管理的简单介绍 (转 :kyle)
  16. 固态硬盘正确分区方法,好用的硬盘分区工具
  17. C# Tif格式转Jpg
  18. 帝国cms php序号,PHP_帝国cms常用标签汇总,判断会员是否登录? - phpStudy
  19. 问题 G: 向右看齐
  20. 2003系统服务器防域名报毒,【系统之家】木马病毒无孔不入 win 2003系统也要防木马...

热门文章

  1. XML与java的应用
  2. [转]Visual Studio 2005创建VC++智能设备项目失败的解决方法
  3. phpnow 更改mysql data文件夹路径
  4. 如何连接oracle 12c可插拔数据库
  5. 封装微信分享到朋友/朋友圈js
  6. Android App性能优化十技巧
  7. Java多线程、主线程等待所有子线程执行完毕、共享资源
  8. [C# 3.0 入门] [第一章 Lambda表达式] 第三节:Lambda与匿名方法的区别(日文翻译)...
  9. 【jQuery笔记Part3】03-jQuery项目:随机抽奖
  10. 【jQuery笔记Part3】01-jQuery-each遍历