带一点dp思想吧,每次看第i个小朋友的时候看一下给不给他要不要紧
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,a[100001]={0};
long long ans=0,sum=0;
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
sum-=m;
sort(a+1,a+1+n);
for(int i=1;i<=n;i++)
{
long long tmp=min((long long)a[i],sum/(n-i+1));
ans+=tmp*tmp;
sum-=tmp;
}
printf("%lld",ans);
return 0;
}