这个题直接找比平均数大的石子的个数就行了,因为我们最终的目的,就是让他们一样!!;
#include <iostream> #define boost ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); #include <cstdio> #include <string.h> #include <algorithm> #include <vector> using namespace std; typedef long long ll; int main() { ll t,n,k,res; scanf("%lld",&t); while(t--) { vector<ll>res; scanf("%lld",&n); ll num=0,sum=0; for(int i=0;i<n;i++) { scanf("%lld",&num); sum+=num; res.push_back(num); } // sort(res.begin(),res.end()); ll ave=sum/n; ll sum3=n*ave; ll c1=0,c2=0; for(int i=0;i<n;i++) { if(res[i]>ave) { c2=c2+res[i]-ave; } else { c1=c1+ave-res[i]; } } printf("%lld\n",c2); // cout<<"ave = "<<ave<<endl; /* if(sum3==sum) { for(int i=0,j=n-1;i<j;i++) { if(res[i]>ave) { break; } while(res[i]<ave) { if(res[j]>ave) { res[i]++; res[j]--; count++; } else { j--; } } } printf("%lld\n",count); } else { int i,j; for(i=0,j=n-1;i<j;i++) { if(res[i]>ave) { break; } while(res[i]<ave) { if(res[j]>ave) { res[i]++; res[j]--; count++; } else { j--; } } } for(int k=j;j>=i;j--) { while(res[j]>ave) { res[j]--; count++; } } printf("%lld\n",count); }*/ } return 0; }