有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。
标签:dash problem microsoft str mda 获得 正整数 sof soft
有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。
求使所有人获得均等糖果的最小代价。
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<algorithm> 5 using namespace std; 6 7 #define LL long long 8 9 const int MAXN=1000005; 10 11 LL n,mid,ave,ans; 12 LL A[MAXN],C[MAXN]; 13 14 int main() 15 { 16 cin>>n; 17 for(int i=1;i<=n;i++) 18 { 19 cin>>A[i]; 20 ave+=A[i]; 21 } 22 ave/=n; 23 for(int i=2;i<=n;i++) 24 C[i]=C[i-1]+A[i]-ave; 25 sort(C+1,C+n+1); 26 mid=C[n/2+1]; 27 for(int i=1;i<=n;i++) 28 ans+=abs(C[i]-mid); 29 cout<<ans<<endl; 30 return 0; 31 }
标签:dash problem microsoft str mda 获得 正整数 sof soft
原文地址:https://www.cnblogs.com/InWILL/p/9315117.html