zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    第十四周学习进度条
    对txt文本中字符的统计
    JAVA项目中的常用的异常处理情况总结
    动手动脑:异常处理
    第一次尝试连接数据库
    Vuejs 实现权限管理
    vue 中的 ... (三个点的用法)
    Vue 中怎么发起请求(二)
    Vue 中怎么发起请求(一)
    Vue添加请求拦截器
  • 原文地址:https://www.cnblogs.com/William-xh/p/7144152.html
Copyright © 2011-2022 走看看