水一道NOIP2002提高组的题【A003】

【A003】均分纸牌【难度A】————————————————————————————————————————————————————【题目要求】

有 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 堆纸牌,每堆纸牌初始数,均大于零且不超过10000),两两之间有一个空格分隔。

【输出要求】

一个数,表示各堆纸牌数均达到相等时的最少移动次数。

【输入示例】

4
9 8 17 6

【输出示例】

3

【解析】

本题主要考查的是数据处理的数学思想,语法方面只需要用到简单的循环和数组就解决问题。既然要均分,我们不妨把目标值算出来,就是所有数的和再除以n,既然说只能左移或右移那我们就把当前值与目标值的差“转手”给当前+1的堆中便可达到目的。

【代码】

#include<iostream>
#include<cstdio>

using namespace std;

int main()
{
    int n,a[100],sum=0,k=0;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        sum+=a[i];
    }
    int mid=sum/n;
    for(int i=0;i<n;i++)
    {
        int t=0;
        if(a[i]!=mid)
        {
            t=a[i]-mid;
            a[i+1]+=t;
            k++;
        }
    }
    cout<<k;
    return 0;
}
时间: 2024-12-24 09:06:22

水一道NOIP2002提高组的题【A003】的相关文章

【水】NOIP2005提高组 谁拿了最多的奖学金

PID16 / 谁拿了最多奖学金 类型:模拟 来源 NOIP2005提高组 题目描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得: 2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得: 3) 成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)

【水】noip1996提高组 砝码称重

A1104. 砝码称重 试题来源 NOIP1996 提高组 问题描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000) 输入格式 a1 a2 a3 a4 a5 a6 (表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个) 输出格式 Total=N (N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况) 样例输入 1 1 0 0 0 0 样例输出 Total=3 数据规模和约定 总重<=1000 思路 在清澄上面看到这么可爱的一道题,这

Vijos P1496 火柴棒等式 【NOIP2008提高组第二题】

题目链接:https://vijos.org/p/1496 题目大意: 给你n(n<24)根火柴棍,你可以拼出多少个形如“A+B=C”的等式?("+"和"="各自需要两根火柴棍) 如果A≠B,则A+B=C与B+A=C视为不同的等式(A.B.C>=0) n根火柴棍必须全部用上 题目思路: 其实这题很水,n最大才24,扣掉+和=就只有20,直接枚举就行. 稍微算一下就知道每个数最大不会超过1111 两层for枚举每个数,判断是否用尽火柴即可. 1 // 2

谁拿了最多奖学金(2005提高组第一题)

题目描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得: 2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得: 3) 成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得: 4) 西部奖学金,每人1000元,期末平均成绩高于85分(

XJOI-NOIP2015提高组模拟题1 day1

其实这只是一道题的题解= =: 博主太弱不会T1T3: 然而我还是要吐槽一下,T2难道你们就没有一点写数据结构的心情吗! T1: 留坑(不太可能填): T2: 题意: 给出大小为n的一个四维点集,和m次询问: 每次询问给出一个点,求四维坐标均小于等于这个点的集合大小: n,m<=30000: 题解: 看到这题的第一反应是排序乱搞,noip难度应该随便玩玩就过了嘛(笑): 但是仔细看看不是这么回事! bzoj有一道题叫陌上花开--然而那个是三维的: 回忆一下,PoPoQQQ让我们搞排序+CDQ分治

noip2002提高组题解

T1.均分纸牌 给出n堆纸牌,每堆a[i]张,总数是n的倍数,每堆只能和相邻的堆移动牌,求最小的次数使得每堆排数相同. 说实话,本来想想就是O(n)的题...然后仔细考虑了一下,假设[1,i]的区间纸牌不等于应有的纸牌数的时候,肯定是从[i+1,n]上转移过来的..那么最直接的方法就是一次移到位,向右一堆多扔少取,一直向右遍历,并统计移动次数即可. T2.字串变换 给出字符串a,b以及变换规则,x->y,表示a中的子串x可以变成y.如果可以再10步内变成b,输出最小步数,否则NO ANSWER!

[NOIP2002] 提高组 洛谷P1034 矩形覆盖

题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这些点可以用 k 个矩形(1<=k<=4)全部覆盖,矩形的边平行于坐标轴.当 k=2 时,可用如图二的两个矩形 sl,s2 覆盖,s1,s2 面积和为 4.问题是当 n 个点坐标和 k 给出后,怎样才能使得覆盖所有点的 k 个矩形的面积之和为最小呢.约定:覆盖一个点的矩形面积为 0:覆盖平行于坐标轴

NOIP2014提高组第二题联合权值

还是先看题吧: 试题描述  无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi ,每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的最短距离.对于图 G 上的点对(u, v),若它们的距离为 2,则它们之间会产生Wu * Wv 的联合权值.请问图 G 上所有可产生联合权值的有序点对中,联合权值最大的是多少?所有联合权值之和是多少? 输入 第一行包含 1 个整数 n.接下来 n-1 行,每行包含 2 个用空格隔开的正整数 

唯一分解定理的应用: NOIP2009 提高组第二题Hankson [唯一分解定理|暴力]

输入输出格式 输入格式: 第一行为一个正整数 n,表示有 n 组输入数据.接下来的 n 行每 行一组输入数据,为四个正整数 a0,a1,b0,b1,每两个整数之间用一个空格隔开.输入 数据保证 a0 能被 a1 整除,b1 能被 b0 整除. 输出格式: 输出文件 son.out 共 n 行.每组输入数据的输出结果占一行,为一个整数. 对于每组数据:若不存在这样的 x,请输出 0: 若存在这样的 x,请输出满足条件的 x 的个数: 输入输出样例 输入样例#1: 2 41 1 96 288 95