题目描述:
有n个小朋友坐成一圈,每人有ai颗糖果。每人只能给左右两人传递糖果。每人每次传递一颗糖果的代价为1。求使所有人获得均等糖果的最小代价。
输入格式:
第一行有一个整数n,表示小朋友个数;
在接下来n行中,每行一个整数ai。
输出格式:
输出使所有人获得均等糖果的最小代价。
样例输入:
4
1
2
5
4
样例输出:
4
C++代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
#define MAX 1000005
typedef long long ll;
int n,mid;
ll a[MAX],c[MAX],sum,ans,avg;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
sum+=a[i];
}
avg=sum/n;
c[1]=0;
for(int i=2;i<=n;i++) c[i]=c[i-1]+a[i]-avg;
sort(c+1,c+1+n);
mid=c[(n+1)/2];
for(int i=1;i<=n;i++) ans+=(ll)abs(mid-c[i]);
printf("%lld",ans);
return 0;
}
记得点赞关注哟!!!