1 条题解
-
0Guest LV 0 MOD
-
1
#include<bits/stdc++.h> using namespace std; int t,m,n; int a[100005]; int main() { freopen("candy.in","r",stdin); freopen("candy.out","w",stdout); scanf("%d",&t); while(t--) { int sum=0,zheng,Mod,cnt;//sum 用于求所有孩子想吃的糖果数 long long ans=0; scanf("%d%d",&m,&n); cnt=n; for(int i=1; i<=n; i++) scanf("%d",&a[i]),sum+=a[i]; if(sum<=m)//一旦现在拥有的能满足孩子的愿望 { printf("0\n");//不高兴度为 0 continue; } sum-=m/*求缺少几个*/,zheng=sum/n/*求先能平均分多少个*/,Mod=sum%n/*平均分后还有多少个*/; sort(a+1,a+1+n);//排序 for(int i=1; i<=n; i++) { if(i<=(n-zheng))//模拟吧!!! { if(Mod<=a[i]) { ans+=Mod*Mod;//注意乘上平方 sum-=Mod;//用完了就减 cnt--;//个数 -- } else//同理,注意情况变化即可 { ans+=a[i]*a[i]; sum-=a[i]; cnt--; Mod=sum/cnt; zheng=sum%cnt; } } else//同上 { if(Mod+1<=a[i]) { ans+=(Mod+1)*(Mod+1); sum-=Mod+1; cnt--; } else { ans+=a[i]*a[i]; sum-=a[i]; cnt--; Mod=sum/cnt; zheng=sum%cnt; } } } printf("%lld\n",ans);//输出结果 } return 0; }
- 1