【C++ 真题】P1031 [NOIP2002 提高组] 均分纸牌

news/2024/12/23 22:07:53 标签: c++, 算法, 开发语言

[NOIP2002 提高组] 均分纸牌

题目描述

N N N 堆纸牌,编号分别为 1 , 2 , … , N 1,2,\ldots,N 1,2,,N。每堆上有若干张,但纸牌总数必为 N N N 的倍数。可以在任一堆上取若干张纸牌,然后移动。

移牌规则为:在编号为 1 1 1 堆上取的纸牌,只能移到编号为 2 2 2 的堆上;在编号为 N N N 的堆上取的纸牌,只能移到编号为 N − 1 N-1 N1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。

现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。

例如 N = 4 N=4 N=4 时, 4 4 4 堆纸牌数分别为 9 , 8 , 17 , 6 9,8,17,6 9,8,17,6

移动 3 3 3 次可达到目的:

  • 从第三堆取 4 4 4 张牌放到第四堆,此时每堆纸牌数分别为 9 , 8 , 13 , 10 9,8,13,10 9,8,13,10
  • 从第三堆取 3 3 3 张牌放到第二堆,此时每堆纸牌数分别为 9 , 11 , 10 , 10 9,11,10,10 9,11,10,10
  • 从第二堆取 1 1 1 张牌放到第一堆,此时每堆纸牌数分别为 10 , 10 , 10 , 10 10,10,10,10 10,10,10,10

输入格式

第一行共一个整数 N N N,表示纸牌堆数。
第二行共 N N N 个整数 A 1 , A 2 , … , A N A_1,A_2,\ldots,A_N A1,A2,,AN,表示每堆纸牌初始时的纸牌数。

输出格式

共一行,即所有堆均达到相等时的最少移动次数。

样例 #1

样例输入 #1

4
9 8 17 6

样例输出 #1

3

提示

对于 100 % 100\% 100% 的数据, 1 ≤ N ≤ 100 1 \le N \le 100 1N100 1 ≤ A i ≤ 10000 1 \le A_i \le 10000 1Ai10000

【题目来源】

NOIP 2002 提高组第一题

题解

#include "bits/stdc++.h"  
using namespace std;
const int N = 1e6+7;

int n,A[N]={0},total=0;
int step = 0;       //步数
int main() {
    cin>>n;
    for(int i=1;i<=n;++i){
        cin>>A[i];//每堆牌初始的牌数
        total+=A[i];
    }

    total = total/n;//计算平均每堆牌的牌数
    
    for(int i=1;i<=n;++i){
        A[i] -= total;/*每堆牌去减平均牌数,多了就是正的,少了就是负的*/
    }
    for(int i=1;i<=n;++i){
        if(A[i]==0) continue;//不多不少就跳过
        A[i+1]+=A[i];   //这一步是将前一堆牌少或多的都加到这一堆牌来,前一堆是负的话这一堆会变小,正的会变多,最后每堆牌都会是0(整除)
        step++;
    }
    cout<<step<<endl;
    return 0;
}

http://www.niftyadmin.cn/n/5797057.html

相关文章

2. Kafka入门-开发环境准备

Kafka入门-开发环境准备 1. 环境准备---------------------------------------------------------------------------------------------- 1. 环境准备 ----------------------------------------------------------------------------------------------

架构演进之路

架构演进 前言1. 单机架构2. 应用数据分离架构3. 应用服务集群架构4. 读写分离 / 主从分离5. 冷热分离架构6. 业务拆分 —— 微服务7. 总结 前言 架构之所以会进行演变&#xff0c;是因为硬件的限制导致没办法容纳更多的请求 解决方法一般有&#xff1a;开源、节流 开源&#…

基于SpringBoot的仿掘金个人博客系统(2025最新原创)

系统介绍&#xff1a;仿掘金精美博客系统 一、概述 本博客系统是一款仿掘金设计的精美博客平台&#xff0c;旨在为用户提供一个功能丰富、操作简便的博客管理环境。系统采用现代化的技术栈&#xff0c;确保了高性能、高可用性和良好的用户体验。 源码资料&#xff1a; http:…

Golang 的并发优势

在如今的编程领域&#xff0c;一个程序能够同时处理多个任务的能力非常重要&#xff0c;这就是所谓的并发处理。而 Golang 在并发编程方面表现十分出色&#xff0c;具有很多独特的优势&#xff0c;简直不要太简单。 一、轻量级的协程&#xff08;Goroutine&#xff09; 在传统…

详细分析:AG32 MCU与STM32/GD32的区别

一、MCU内核的区别 STM32/GD32是ARM Cortex内核; AG32是目前最新的RISC-V内核,该内核具有速率高,功耗低等特点,不受制于ARM,应用灵活等特点。 二、AG32与STM32/GD32 MCU的引脚区别 AG32 芯片和其他芯片(比如ST、GD)在使用上有一个很大的差异点,是AG32 的IO 引脚并不…

CSS基础(前端)

css定义 css(Cascading StyleSheet)层叠样式表&#xff0c;它是用来美化页面的一种脚本语言。 脚本语言不是编程语言 css作用 美化界面 ,比如:设置标签文字大小、颜色、字体加粗等样式。 控制页面布局,比如&#xff1a;设置浮动、定位等样式。 divcss架构 css基本语法 C…

【Go】-限流器的四种实现方法

目录 关于限流和限流器 固定窗口限流器 滑动窗口限流器 漏桶限流器 令牌桶限流器 总结 关于限流和限流器 限流&#xff08;Rate Limiting&#xff09;是一种控制资源使用率的机制&#xff0c;通常用于防止系统过载和滥用。 限流器&#xff08;Rate Limiter&#xff09;是…

LeetCode169. 多数元素(2024冬季每日一题 39)

给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&#xff1a;3 示例 2…