zoukankan      html  css  js  c++  java
  • 分糖果

    【题目描述】

    幼儿园的N个小朋友得到了M颗糖果。
    每个小朋友都有一个想要得到的糖果数目,如果没有达到他们的预期,就会不高兴。不高兴的程度可以用一个数值表示,就是他们无法满足的糖果数目的平方。例如,一个小朋友想要得到32颗糖果,而他只得到29颗糖果,那么有3颗糖果无法满足,因此不高兴值为9.
    不幸的是,现有的糖果无法满足所有的小朋友,因此,需要你给出一个分配方案,使得不高兴值的总和最小。
    【输入】
    第一行两个整数M和N(1<=M<=2*10^9)(1<=N<=100,000)
    接下来N行,每行一个整数,表示每个孩子想要的糖果数。每个小于2*10^9且总和肯定超过M
    【输出】
    最少生气值总和。输出数据保证结果在int64范围之内。
    【样例输入】
    5 3
    1
    3
    2
    【样例输出】
    1
    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        long long m,n,i,sum=0;
        scanf("%d%d",&m,&n);
        long long s[n+1],ans=0;
        s[0]=0;
        for(i=1;i<=n;i++)
        {
            scanf("%lld",&s[i]);
            sum+=s[i];
        }
        if(sum<=m){
            cout<<0<<endl;
            return 0;
        }
        sort(s+1,s+n+1);
       long long r=m,tail=0;
        for(i=n;i>0;i--)//面积法 
        {
            if(r>=(s[i]-s[i-1])*(n-i+1)) r-=(s[i]-s[i-1])*(n-i+1);
            else
            {
                long long p=s[i]-r/(n-i+1);
                long long q=r%(n-i+1);
                ans+=p*p*(n-i+1-q)+(p-1)*(p-1)*q;
                tail=i;
                break;
            }
        }
        for(i=0;i<tail;i++)
        {
            ans+=s[i]*s[i];
        }
        printf("%lld
    ",ans);
        return 0;
    }
    View Code

    平均时生气值最小,达不到平均使最高的减小

    不要忘记努力,不要辜负自己 欢迎指正 QQ:1468580561
  • 相关阅读:
    python3 5个带key内置函数
    python3常用内置函数总结
    python入门基础-函数装饰器的理解
    python入门基础-三元表达式、命名空间、作用域、函数名本质、闭包
    python入门基础-初识函数
    第二章001编写脚本
    Appium 自动化测试第一天——基础知识
    python基础-读取文件
    linux6.4 安装python3 pip setuptools
    selenium+python之HTML测试报告
  • 原文地址:https://www.cnblogs.com/smallocean/p/8543643.html
Copyright © 2011-2022 走看看