当前位置: 首页 > news >正文

问题 B: 分牌

题目描述

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

输出

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

样例输入 Copy
4
9 8 17 6 
样例输出 Copy
3

问题分析

计算每堆纸牌与平均数的差值,然后在相邻的纸牌堆之间进行调整,从而使得每堆纸牌的数量达到平均数。

如果某堆纸牌在达到平均数之前需要移动纸牌,那么就增加移动次数。

#include <bits/stdc++.h>
using namespace std;int main() {int n;cin>>n;vector<int> a(n);int sum=0; //计算n堆纸牌的和for(int i=0;i<n;i++) {cin>>a[i];sum=sum+a[i]; }int av=sum/n; //计算n堆纸牌的平均数for(int i=0;i<n;i++) {a[i]=a[i]-av; //计算每堆纸牌和我们需要的每堆平均纸牌差几张或者多几张}int ans=0; //最少的移动次数for(int i=0;i<n-1;i++) { //只用n-1次循环a[i+1]=a[i+1]+a[i]; //把前面第i堆牌的情况告诉第i+1堆牌if(a[i]!=0) { //如果当前的牌和平均纸牌数有偏差ans=ans+1; //说明这里肯定要进行移动}}cout<<ans; //输出最少的移动次数
}

http://www.lryc.cn/news/274284.html

相关文章:

  • 3元一平方公里的在线卫星影像
  • 只会用 xxl-job?更强大的新一代分布式任务调度框架来了!
  • LeetCode-无重复字符的最长子串(3)
  • 【C#】知识点实践序列之Lock简单解决并发引起数据重复问题
  • NLP基础——TF-IDF
  • kubernetes(四)
  • 安科瑞变电站综合自动化系统在青岛海洋科技园应用——安科瑞 顾烊宇
  • 紫光展锐5G扬帆出海 | 欧洲积极拥抱更多5G选择
  • Open3D聚类算法
  • swing快速入门(三十九)进度对话框
  • Oracle-存储过程
  • L1-085:试试手气
  • nginx+keepalived实现七层负载
  • 机器人制作开源方案 | 智能盲道除雪小车
  • Mypy: 把静态类型检查带给Python
  • 【心得杂记】简单聊聊限制高速面阵相机性能的因素
  • 金蝶Apusic应用服务器 loadTree JNDI注入漏洞
  • 计算机毕业设计 基于SpringBoot的公司资产网站的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 如何获取时间戳?
  • Vue页面传值:Props属性与$emit事件的应用介绍
  • 【mars3d】new mars3d.layer.GeoJsonLayer(实现环状面应该怎么传data
  • Websocket实时更新商品信息
  • 数据结构第六弹---带头双向循环链表
  • 洛谷——P1347 排序(图论-拓扑排序)
  • JVM内存管理
  • 将 Python 和 Rust 融合在一起,为 pyQuil® 4.0 带来和谐
  • Spring Boot应用程序中VO的理解及使用
  • 华为交换机ETH-TRUNK链路聚合lacp模式与手工模式
  • 函数图像化
  • gnu工程的编译 - 以libiconv为例