2016-2017学年第三次测试赛 习题H MCC的考验

问题 H: MCC的考验

时间限制: 1 Sec  内存限制: 128 MB

题目描述

MCC男神听说新一期的选拔赛要开始了,给各位小伙伴们带来了一道送分题,如果你做不出来,MCC会很伤心的。

给定一个大小为n的非空整数数组,现在定义一种操作,每一步操作会将该数组中的n-1个数同时加1,问最少进行多少步操作后,可以使得数组里的每一个数字都相等。

例如,一个n为3的数组[1,2,3],最少进行3步操作后,可以变为[4,4,4]

过程如下:[1,2,3]  =>  [2,3,3]  =>  [3,4,3]  =>  [4,4,4]

输入

第一行为一个整数n,代表数组个数。1<=n<=1,000,000

第二行为每个数组的数字a[i],1<=a[i]<=1000

输出

输出需要的最少操作数。

样例输入

3 2 3 4

样例输出

3

题目原型:如何用最少的步数使数组的每个元素都相等。

参考算法网站:http://blog.csdn.net/quhaoye/article/details/73251159

解题思路分析

将n-1个数加1,相当于将所有数都加1,再将其中一个数减去1。

将所有数都加1这个操作,其实不会改变任何数的相对大小,也就是所有数两两之间的差都是不会变的,这对于要使所有元素均相等的目标来说没有影响,所以可以忽略这一部分。

那么问题就变成每次选个数减1来达到目标的最小次数。

要使次数最小,而且每次只能将元素减1,故应当把所有数减到与最小值相等。

若n个元素为a(0),a(1),……,a(n-1),其中最小值为min,则答案为a(0)+a(1)+……+a(n-1)-min*n。

只需求出n个数中的最小值以及它们的和来计算即可,时间复杂度为O(n)。

然后就找到最小的那个值就可以了。

附上代码:

#include <iostream>
#include<math.h>
#include <iomanip>
#include<cstdio>
#include<string>
#include<map>
#include<vector>
#include<list>
#include<algorithm>
#include<stdlib.h>
#include<iterator>
#include<sstream>
#include<string.h>
#include<stdio.h>
using namespace std;

int main()
{

    unsigned int n;
    cin>>n;
    int *p; //动态内存分配
    p=new int[n];
    for(int ii=0;ii<n;ii++)
    {
        cin>>p[ii];//读取数据
    }
    int count=0;
    int min=p[0];
    for(int i=0;i<n;i++)
    {
        if(p[i]<=min)
        {
            min=p[i];//在循环过程找最小值
        }
        count=count+p[i];//在循环过程中计算总和
    }
    //sort(p,0,n-1); //本来相用快排的 但是超时了

    cout<<count-min*n;//然后就用公式法就行了
    delete []p;
    return 0;
}
时间: 2024-10-29 22:03:57

2016-2017学年第三次测试赛 习题H MCC的考验的相关文章

2016-2017学年第三次测试赛 习题E 林喵喵算术

时间限制: 1 Sec  内存限制: 128 MB 提交: 70  解决: 25 提交统计讨论版 题目描述 给你两个八进制数,你需要在八进制计数法的情况下计算a-b. 如果结果为负数,你应该使用负号代替补码. 输入 输入的第一个数字为T,表式测试的样例的组数(1 <= T <= 1000). 每组数据包括两个八进制数a,b. 输出 输出计算结果,同样八进制表示.如果结果为负数,你应该使用负号代替补码. 样例输入 2 176 7 4 14 样例输出 167 -10 思路:水题,很简单,就是C++

【南工程开源计划-有答案】南京工程学院试卷(A)-电力系统通信网2016/2017学年-第2学期-杨小伟-开卷

南京工程学院试卷(A) 2016/2017学年    第 2 学期 电力系统通信网(俗称通信网) 课程所属部门:     通信工程          课程名称:    电力系统通信网 考试方式:    开卷      使用班级:  通信(卓越)151.跨专业选修.重修 命 题 人:  杨小伟   教研室主任审核:             主管领导批准: 题号 一 二 三 四 五 六 总分 得分 一.简答题(本题6小题,每小题6分,共36分) 1.简述电力通信网的组成结构? 电网的调度管理体制采用

【2016北京集训测试赛(八)】 crash的数列

Description 题解 题目说这是一个具有神奇特性的数列!这句话是非常有用的因为我们发现,如果套着这个数列的定义再从原数列引出一个新数列,它居然还是一样的...... 于是我们就想到了能不能用多点数列套着来加速转移呢? 但是发现好像太多数列套起来是可以烦死人的...... 我们就采用嵌套两次吧,记原数列为A,第一层嵌套为B,第二层嵌套为C. 我们其实可以发现一些规律,对于Ci,它对应了B中i的个数:对于Bi,它对应了A中i的个数. 稍加处理即可,我们一边计算一边模拟数列的运算,同时可以计算

2016集训测试赛(二十五)小结

这场测试赛有必要小结一下. 昨晚 1 点才睡, 今天状态很差, 先睡了 1 个小时, 然后开始打比赛. 第一题不大会做, 写了一个代码后发现是错的, 第二题看不懂题, 第三题简单地分析了一下, 发现是一个树形DP . 然后做 T3 , 大概推了很久, 写了很久, 又写了几个对拍, 搞到 11 点才搞掂. 这时候我发现 T1 有 50 分是我可做的, 然后 T2 的题意仍然不是很明确, 我想尝试着写写 T2 , 这个必须要写出来才能看出题意是不是这样, 写着写着发现 T2 的题意不是我理解的这样,

2018冬令营模拟测试赛(三)

2018冬令营模拟测试赛(三) [Problem A]摧毁图状树 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见"试题描述" 输出示例 见"试题描述" 数据规模及约定 见"试题描述" 题解 这题没想到贪心 QwQ,那就没戏了-- 贪心就是每次选择一个最深的且没有被覆盖的点向上覆盖 \(k\) 层,因为这个"最深的没有被覆盖的点"不可能再有其它点引出的链覆盖它了,而它又

测试赛C - Eqs(哈希)

C - Eqs Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Description Consider equations having the following form: a1x1 3+ a2x2 3+ a3x3 3+ a4x4 3+ a5x5 3=0 The coefficients are given integers from the interva

2018冬令营模拟测试赛(十七)

2018冬令营模拟测试赛(十七) [Problem A]Tree 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见"试题描述" 输出示例 见"试题描述" 数据规模及约定 见"试题描述" 题解 这个数据范围肯定是树上背包了. 令 \(f(i, j, k)\) 表示子树 \(i\) 中选择了 \(j\) 个节点,路径与根的连接情况为 \(k\),具体地: \(k = 0\) 时,路径的两个端点

2018.10.2浪在ACM 集训队第二次测试赛

2018.10.26 浪在ACM 集训队第二次测试赛 题目一览表(Green color indicate understand and Accept) 来源 考察知识点 完成时间 A 1273 海港(比赛过题) NOIP 普及组 2016 查分数组+二分 2018.10.26 D 1272 回问日期(比赛过题) NOIP 普及组 2016 思维? 2018.10.26 G 1268 扫雷游戏(比赛过题) NOIP 普及组 2015 暴力 or DFS 2018.10.26          

2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)

摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5984 Pocky 题意 给出一根棒子(可以吃的)的长度x和切割过程中不能小于的长度d,每次随机的选取一个位置切开,吃掉左边的一半,对右边的棒子同样操作,直至剩余的长度不大于d时停止.现在给出x和d,问切割次数的数学期望是多少. 解题思路 当看到第二个样例2 1时,结果是1.693147,联想到ln