题目描述

有 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)计算出平均纸牌数

(2)对牌叠预处理(也可以不作处理)

(3)模拟移牌情况

(4)输出答案

因为只能移动相邻的,可以将牌少于avg的把后一个减少(avg - 前一个),计数器++;多于的同理

#include<iostream>
#include<cstdio>
#include<cstring>
#define LL long long
using namespace std;
int main()
{int n,i,sum=0,ans=0,a[1000];scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&a[i]);sum+=a[i];}sum/=n;//平均值for(i=1;i<=n;i++){if(a[i]<sum)//多了
        {ans++;a[i+1]-=(sum-a[i]);}elseif(a[i]>sum)//少了
        {ans++;a[i+1]+=(a[i]-sum);}}printf("%d\n",ans);return  0;
}

不预处理模拟

我们可以把平均值设为0,牌数大于平均值的排堆牌数为正数,反之则为负数。

#include<bits/stdc++.h>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int a[10005];
const int inf = 0x3f3f3f3f;
int main()
{int n, sum = 0, Min = inf, Max = -inf, cnt = 0;cin >> n;for(int i=1; i<=n; i++){cin >> a[i];sum += a[i];}int 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;a[i+1] = a[i+1] + a[i];cnt++;}cout<<cnt<<endl;
}

预处理模拟

转载于:https://www.cnblogs.com/Roni-i/p/8728760.html

洛谷 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.1,2,-,N.1,2,-,N.每堆上有若干张,但纸牌总数必为NNN的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为111堆上取的 ...

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

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

  5. 洛谷 P5594 【XR-4】模拟赛 视频讲解(二维数组、模拟)

    洛谷 P5594 [XR-4]模拟赛(需要 二维数组) 题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 ...

  6. 洛谷算法题单:模拟与高精度例题(上)

    一:模拟 想要利用计算机解决现实生活中的一些复杂的问题时,建立模型是解决问题的关键. 举个生活中常见的例子:我们拿到了某次数学考试的成绩单,现在需要知道谁考得最好.当然不能把成绩单对着电脑晃一晃,然后 ...

  7. 洛谷算法题单:模拟与高精度例题(下)

    接着上篇的例题. 1.洛谷P4924魔法少女小Scarlet 题目描述: Scarlet最近学会了一个数组魔法,她会在n∗n二维数组上将一个奇数阶方阵按照顺时针或者逆时针旋转90°, 首先,Scarl ...

  8. 洛谷 P5594 【XR-4】模拟赛 记录

    洛谷 P5594 笔记 本人菜鸡,入门刷题记录,有错望指出 1.matrix过大时放在main函数里会爆栈,运行不了,改成全局变量 2.第一次做的时候,先整个矩阵读取,再对每天都遍历整个二维数组,时间 ...

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

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

最新文章

  1. 高效搭建Storm全然分布式集群
  2. Java的char数据类型存储一个中文字符
  3. python升级第三方库,Python第三方库的卸载_安装_更新
  4. 推荐:用动画的形式呈现解LeetCode题目的思路(github上25000多star)
  5. 什么叫优雅降级和渐进增强
  6. 矩阵树 Matrix-Tree 定理实现模板(高斯消元求解行列式)
  7. oracle 处理过程,Oracle SQL语句处理过程(转载)
  8. linux 运行选择哪个cpu核,判断Linux进程在哪个CPU核运行的方法
  9. 解决int和Integer不能互转
  10. python 迭代器协议斐波那契数列
  11. qt opengl 2d绘图效率_Qt趣味开发之打造一个3D名字渲染小工具
  12. Pytorch中的train和eval模式详解
  13. 如何将Mac上的墙纸更改为任何图像?
  14. JavaScript:自封装函数利用内置Date对象输出格式化“YYYY-MM-dd hh:mm:ss”时间
  15. 大众点评的实时监控系统分析
  16. 后台管理系统PRD该怎么写?
  17. 更改eclipse字体
  18. python毕业论文答辩ppt_如何制作优秀的毕业论文答辩 PPT?
  19. Cursor的使用和下载
  20. 用Windows自带的系统恢复环境WinRE进行系统重大故障排查,轻松修复Windows蓝屏、白屏等问题

热门文章

  1. 从CMO到龙泉寺弟子:佛法改变人生
  2. java加载配置文件
  3. ThinkPHP 3.2版本 , 无法读取$_SESSION['verify_code']
  4. 转载:.NET Memory Leak: XmlSerializing your way to a Memory Leak
  5. 视觉、语音、NLP、ML、AI安全,一家金融科技公司等你来
  6. 瑞典卡罗林斯卡医学院博士后招聘,图像流行病学和深度学习领域
  7. 南加州大学等开源元学习研究库learn2learn
  8. 力荐!计算机视觉开源工具中的瑞士军刀—Dlib最新高级特性教程
  9. 哪里可以学3D次世代角色建模?具体学什么东西?
  10. 收藏 | Transformers资料汇总!从原理到应用