题目描述

有 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)。

输入输出格式

输入格式:

键盘输入文件名。文件格式:

N(N 堆纸牌,1 <= N <= 100)

A1 A2 … An (N 堆纸牌,每堆纸牌初始数,l<= Ai <=10000)

输出格式:

输出至屏幕。格式为:

所有堆均达到相等时的最少移动次数。

输入输出样例

输入样例#1:

4
9 8 17 6

输出样例#1:

3

先求出牌总数的平均数,目标状态肯定是让所有牌堆的牌数量都等于这个平均数。

如果当前堆牌数多于平均数,就需要移走,否则需要从别处取来。

从最左端向右扫描,规定只能向右移动牌(移动正数张表示移走,移动负数张表示取来),算需要移动的次数。←和原问题等价。

 1 /*by SilverN*/
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 using namespace std;
 8 const int mxn=1e4;
 9 int read(){
10     int x=0,f=1;char ch=getchar();
11     while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
12     while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
13     return x*f;
14 }
15 int n;
16 int a[mxn];
17 int smm=0;
18 int main(){
19     n=read();
20     int i,j;
21     for(i=1;i<=n;i++){
22         a[i]=read();
23         smm+=a[i];
24     }
25     smm/=n;
26     int cnt=0;
27     for(i=1;i<n;i++){
28         if(a[i]!=smm){
29             ++cnt;
30             a[i+1]+=a[i]-smm;
31         }
32     }
33     cout<<cnt<<endl;
34     return 0;
35 }

转载于:https://www.cnblogs.com/SilverNebula/p/5970733.html

[NOIP2002] 提高组 洛谷P1031 均分纸牌相关推荐

  1. 洛谷——P1031 均分纸牌

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

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

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

  3. 洛谷P1031 均分纸牌(贪心)

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

  4. [NOIP2006] 提高组 洛谷P1066 2^k进制数

    题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进制数q后 ...

  5. [NOIP1999] 提高组 洛谷P1014 Cantor表

    题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 - 2/1 2/2 2/3 2/4 - ...

  6. [NOIP2005] 提高组 洛谷P1051 谁拿了最多奖学金

    题目描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1 ...

  7. [NOIP2012] 提高组 洛谷P1080 国王游戏

    题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍 ...

  8. [NOIP1998] 提高组 洛谷P1011 车站

    题目描述 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人.从第3站起( ...

  9. [NOIP2007] 提高组 洛谷P1099 树网的核

    题目描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各边长度的集合,并 ...

最新文章

  1. Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
  2. C 过渡 C++ 1
  3. UA SIE545 优化理论基础4 对偶理论简介2 弱对偶与Duality Gap
  4. Map+Model+ModelMap介绍
  5. CF 670C Cinema(算竞进阶习题)
  6. mysql报错:Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre
  7. 编译C/C++为dll供Python调用
  8. Django系列:(1)PyCharm下创建并运行我们的第一个Django工程
  9. 服务器上装双系统,服务器上安装双系统
  10. Acer4745G笔记本蓝牙驱动安装
  11. Oracle imp/impdp 导入dmp文件到数据库
  12. 像智能手机一样造车,可能吗?
  13. android 平板怎么截图,平板电脑怎样截图
  14. matlab中提取公因子化简,利用MATLAB化简表达式或者多项式 | 望天博客
  15. 安卓下使用OpenCL进行PowerVR GPU编程
  16. 康考迪亚大学应用计算机科学,康考迪亚大学专业设置详情
  17. 51单片机数码管交通灯倒计时c语言,51单片机数码管倒计时模拟交通灯汇编程序...
  18. Java IO模型:BIO、NIO、AIO讲解
  19. 小程序获取oppenid时返回40125或者40029
  20. NFT Insider #65:韩国娱乐业巨头CJ ENM与The Sandbox达成合作,YGG 建立巴西社区的SubDAO

热门文章

  1. 线索二叉树怎么画_固原超级记忆技巧课程怎么学_蒙正智升教育
  2. python程序中断时,输出打印日志
  3. windows安装spark工具记录
  4. 程序语言python循环_Python语言程序设计之一--for循环
  5. webstorm前端调用后端接口_一篇前端同学对后端接口的吐槽
  6. java定时器结合springboot_SpringBoot开发案例之整合定时任务(Scheduled)
  7. c++重载自增与自减运算符(前置与后置)
  8. 笔记-高项案例题-2019年下-人力资源管理-管理者权力-马斯洛需求理论-冲突管理...
  9. 笔记-信息化与系统集成技术-信息的质量属性
  10. Linux系统中软链接与硬链接使用特点