洛谷 P1031 均分纸牌【交叉模拟】
题目描述
有 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)
输出格式:
输出至屏幕。格式为:
所有堆均达到相等时的最少移动次数。
输入输出样例
4 9 8 17 6
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 均分纸牌【交叉模拟】相关推荐
- 洛谷——P1031 均分纸牌
题目描述 有NN堆纸牌,编号分别为 1,2,-,N1,2,-,N.每堆上有若干张,但纸牌总数必为NN的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为11堆上取的纸牌,只能移到编号为 ...
- [NOIP2002] 提高组 洛谷P1031 均分纸牌
题目描述 有 N 堆纸牌,编号分别为 1,2,-, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 ...
- 洛谷P1031 均分纸牌(贪心)
题目描述 有N堆纸牌,编号分别为 1,2,-,N.1,2,-,N.1,2,-,N.每堆上有若干张,但纸牌总数必为NNN的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为111堆上取的 ...
- Luogu P1031 均分纸牌(贪心)
P1031 均分纸牌 题目描述 有 N 堆纸牌,编号分别为 1,2,-, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌 ...
- 洛谷 P5594 【XR-4】模拟赛 视频讲解(二维数组、模拟)
洛谷 P5594 [XR-4]模拟赛(需要 二维数组) 题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 ...
- 洛谷算法题单:模拟与高精度例题(上)
一:模拟 想要利用计算机解决现实生活中的一些复杂的问题时,建立模型是解决问题的关键. 举个生活中常见的例子:我们拿到了某次数学考试的成绩单,现在需要知道谁考得最好.当然不能把成绩单对着电脑晃一晃,然后 ...
- 洛谷算法题单:模拟与高精度例题(下)
接着上篇的例题. 1.洛谷P4924魔法少女小Scarlet 题目描述: Scarlet最近学会了一个数组魔法,她会在n∗n二维数组上将一个奇数阶方阵按照顺时针或者逆时针旋转90°, 首先,Scarl ...
- 洛谷 P5594 【XR-4】模拟赛 记录
洛谷 P5594 笔记 本人菜鸡,入门刷题记录,有错望指出 1.matrix过大时放在main函数里会爆栈,运行不了,改成全局变量 2.第一次做的时候,先整个矩阵读取,再对每天都遍历整个二维数组,时间 ...
- 用贪心策略均分纸牌(洛谷P1031题题解,Java语言描述)
题目要求 P1031题目链接 分析 我们一定要知道的是average,这个average其实就是每堆牌最终一定要达到的情况. 想要更简单的结果,那就可以用贪心策略,从某一侧开始,逐一的补齐或天选,反正 ...
最新文章
- 高效搭建Storm全然分布式集群
- Java的char数据类型存储一个中文字符
- python升级第三方库,Python第三方库的卸载_安装_更新
- 推荐:用动画的形式呈现解LeetCode题目的思路(github上25000多star)
- 什么叫优雅降级和渐进增强
- 矩阵树 Matrix-Tree 定理实现模板(高斯消元求解行列式)
- oracle 处理过程,Oracle SQL语句处理过程(转载)
- linux 运行选择哪个cpu核,判断Linux进程在哪个CPU核运行的方法
- 解决int和Integer不能互转
- python 迭代器协议斐波那契数列
- qt opengl 2d绘图效率_Qt趣味开发之打造一个3D名字渲染小工具
- Pytorch中的train和eval模式详解
- 如何将Mac上的墙纸更改为任何图像?
- JavaScript:自封装函数利用内置Date对象输出格式化“YYYY-MM-dd hh:mm:ss”时间
- 大众点评的实时监控系统分析
- 后台管理系统PRD该怎么写?
- 更改eclipse字体
- python毕业论文答辩ppt_如何制作优秀的毕业论文答辩 PPT?
- Cursor的使用和下载
- 用Windows自带的系统恢复环境WinRE进行系统重大故障排查,轻松修复Windows蓝屏、白屏等问题
热门文章
- 从CMO到龙泉寺弟子:佛法改变人生
- java加载配置文件
- ThinkPHP 3.2版本 , 无法读取$_SESSION['verify_code']
- 转载:.NET Memory Leak: XmlSerializing your way to a Memory Leak
- 视觉、语音、NLP、ML、AI安全,一家金融科技公司等你来
- 瑞典卡罗林斯卡医学院博士后招聘,图像流行病学和深度学习领域
- 南加州大学等开源元学习研究库learn2learn
- 力荐!计算机视觉开源工具中的瑞士军刀—Dlib最新高级特性教程
- 哪里可以学3D次世代角色建模?具体学什么东西?
- 收藏 | Transformers资料汇总!从原理到应用