这道题其实也很简单,就是当时做得有点着急了,没仔细分析完就做了,导致做麻烦了,而且还没做对。后来仔细分析完发现只需要考虑比平均数大的数就行了(因为比平均数小的数要补的数肯定是从比平均数大的数那里拿来的)
完整代码:
#include <iostream> #include <cstdio> #include <string> #include <cstring> #include <algorithm> #include <map> #include <cmath> using namespace std; int cmp(int a,int b) { return a>b; } int main() { int t; scanf("%d",&t); while(t--) { long n,a[100010],sum=0; scanf("%ld",&n); for(int i=0;i<n;i++) { scanf("%ld",&a[i]); sum+=a[i]; } long aver=sum/n; sum=0; sort(a,a+n,cmp); for(int i=0;i<n;i++) { if(a[i]<aver) { break; } sum+=(a[i]-aver); } printf("%ld\n",sum); } }