题意:一步步的移火柴(只能在相邻火柴间移动)使火柴盒里的火柴数相等所需要的最短步数。
思路:第一个不够的都从第二个拿,第二个不够的都从第三个拿,出现负数没关系。
<span style="font-size:14px;">#include <iostream>
#include <math.h>
#include <stdio.h>
#include <cstdlib>
using namespace std;
long long a[50001];
int main()
{
int n;
long long ans;
long long sum;
while (cin>>n)
{
ans=0;
sum=0;
for (int i=0; i<n; i++)
{
cin>>a[i];
sum+=a[i];
}
sum/=n;
for (int i=0; i<n; i++)
{
if(a[i]<=sum)
{
ans+=sum-a[i];
a[i+1]-=(sum-a[i]);
}
else
{
ans+=a[i]-sum;
a[i+1]+=(a[i]-sum);
}
}
cout<<ans<<endl;
}
return 0;
}</span>