首页 > 编程语言 >问题 I: 深入浅出学算法051-均分纸牌

问题 I: 深入浅出学算法051-均分纸牌

时间:2024-07-13 23:00:06浏览次数:12  
标签:10 ball 纸牌 int dif 深入浅出 ++ 051

题目描述

有 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<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<vector>
#define N 50005
using namespace std;
int n;
int main()
{
    cin >> n;
    vector<int> ball(n);
    int sum = 0;
    for (int i = 0; i < n; i++)
    {
        cin >> ball[i];
        sum += ball[i];
    }
    int count = 0;
    int a = sum / n;
    int i = 0, j = n - 1;
    while(i<=j)
    {
        if (ball[i] != a)
        {
            if (ball[i] < a)
            {
                int dif = a - ball[i];
                ball[i + 1] -= dif;
                count++;
            }
            else
            {
                int dif = ball[i] - a;
                ball[i + 1] += dif;
                count++;
            }
        }
        if (ball[j] != a)
        {
            if (ball[j] < a)
            {
                int dif = a - ball[j];
                ball[j - 1] -= dif;
                count++;
            }
            else
            {
                int dif = ball[j] - a;
                ball[j-1] += dif;
                count++;
            }
        }
        i++;
        j--;
    }
    cout << count << endl;
    return 0;
}

标签:10,ball,纸牌,int,dif,深入浅出,++,051
From: https://blog.csdn.net/2301_80550438/article/details/140408178

相关文章

  • [Python基础] matplotlib绘图的深入浅出学习
    matplotlib 是Python中最常用的绘图库之一,它提供了丰富的绘图功能,非常适合数据可视化。下面我将从整体逻辑开始,逐步深入到具体的例子matplotlib绘图整体逻辑:1、创建图像对象: plt.figure()2、绘制数据:plt.plot()等函数绘制数据 3、设置坐标轴、标签、图表标题等;现在,......
  • CF1051F题解
    TheShortestStatement算法:树链剖分,最小生成树,最短路。先讲一下题意:有一个\(n\)点\(m\)边的无向连通图,\(q\)次询问,每次询问\(a\)到\(b\)的最短路长度。数据范围\(1\len,m\le10^5,m-n\le20\)。首先发现给了一个很奇怪的限制:\(m-n\le20\),考虑他有什么用。我们在......
  • 问题 E: 深入浅出学算法047-美元汇率
    5400300500300250样例输出 Copy266.67提示Day 1 ...changing 100.0000 美元= 400.0000 马克 Day 2 ...changing 400.0000 马克= 133.3333 美元 Day 3 ...changing 133.3333 美元= 666.6666 马克 Day 5 ...changing 666.6666 马克= ......
  • 贪心经典例题:均分纸牌
    希望粉丝破50. 贪心实际上就是把眼前的利益最大化,如果你要做出这道题你一定要找出贪心原则。贪心原则https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E8%B4%AA%E5%BF%83%E5%8E%9F%E5%88%99&fenlei=256&rsv_pq=0xb087efe300ab5a2d&rsv_t=78216%2Bh......
  • 051java jsp ssm高校网上教材征订系统(源码+数据库+文档)
     项目技术:Spring+SpringMVC+MyBatis等等组成,B/S模式管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/1......
  • PE工具 -- EasyU(优启通) v3.7.2024.0515 VIP版
    软件简介优启通(EasyU),也称为EU,是由IT天空开发的一款专业U盘启动盘制作工具。它以U盘作为使用载体,提供了一种便携、高效的系统预安装环境(PE)。优启通的特点包括简约易操作的用户界面,以及广泛的硬件兼容性。它支持BIOS(Legacy)与UEFI两种启动模式,并在主流硬件的基础上兼容早期多数......
  • 深入浅出简单工厂模式及其在 Spring 框架中的应用
    前言在软件开发过程中,我们经常需要创建各种对象。如果直接在客户端代码中使用new关键字来实例化对象,不仅会导致代码耦合度高,还会使系统难以扩展和维护。简单工厂模式通过引入一个工厂类来负责创建对象,降低了客户端与具体类之间的耦合度,提高了代码的灵活性和可维护性。在......
  • 深入浅出Netty:高性能网络应用框架的原理与实践
    深入浅出Netty:高性能网络应用框架的原理与实践1.Netty简介Netty是一个基于Java的异步事件驱动的网络应用框架,广泛用于构建高性能、高可扩展性的网络服务器和客户端。它提供对多种协议(如TCP、UDP、SSL等)的支持,适用于各种网络通信场景。2.核心组件Channel:代表一个到远程......
  • (必读)深入浅出Pandas:利用Python进行数据处理与分析 (李庆辉)
    书:pan.baidu.com/s/1tIHXj9HmIYojAHqje09DTA?pwd=jqso提取码:jqsoPandas概述:介绍了Pandas库的基本概念、特点和优势,以及它在数据处理和分析领域的重要性。Series对象:讲解了Series对象的创建、访问、修改以及常用的统计和分析方法,如均值、中位数、标准差等。DataFrame对象:详细......
  • AIGC绘画设计:深入浅出完整解析Stable Diffusion(SD)核心基础知识
    心血来潮再加上想要督促自己,所以决定开始搞AI绘画技术的分享。如果觉得我写的好,又很久没更新,请多点我,因为可能我的懒癌又犯了,哈哈哈哈哈......没有本人帅,十分之一都没有不多废话,切入主题。学一门技术什么最难?当然是入门最难!从0到1,远远比从1到100要难一百倍,为啥?因为你之前......