题解 P6236 【[COCI2010-2011#1] LJUTNJA】
前言 :
题面传送门
博客食用体验更加qwq
一道十分明显又常见的贪心题——
思路 :
本题就是将一些糖果分配给几个幼儿园小盆友,每个小盆友有各自的期望值,如果没有达到期望值生气指数就会增加(生气指数=少得到糖果数的平方),让你找到最优分配方案使得生气指数和最小
做法:先对
代码 :
#include<bits/stdc++.h>//Code by btng_smith666 juruo
using namespace std;
long long a[100001],ans,n,m,maxx,qwq=1;//注意开 long long
bool cmp(long long x,long long y)//手打 cmp
{
return x>y;//降幂排列
}
int main(qwq)//主函数
{
scanf("%lld%lld",&m,&n);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
sort(a+1,a+n+1,cmp);//先降幂排一下序
maxx=a[1];//将最大值赋成输入中 n 个孩子的最大期望值
while(m)//循环找出最优分配方法
if(a[qwq]!=maxx)
maxx=a[1],qwq=1;
else
a[qwq++]--,m--;
for(int i=1;i<=n;i++)
ans+=a[i]*a[i];//将少的颗数平方累加到最优方案里,注意这道题最后一个点成功把 STL math 库里的 pow 函数完美地卡死了
printf("%lld",ans);
return 0;
}
后记 :
本代码有防抄袭措施,但估计只要学过 C++ 就能轻易发现
大家如果觉得好的话就点个赞吧 qwq !