题目:
分析:
刚开始看成只有1个台只能移动到相邻的了。和紫书上的做法类似。
int main()
{
vector<int> m;
int sum=accumulate(m.begin(),m.end(),0);
if(sum%m.size()!=0) return -1;
int adv=sum/m.size();
int n=0;
int r=0;
for(int i=0;i<m.size()-1;i++)
{
m[i]=m[i]+n;
r+=abs(m[i]-adv);
n=m[i]-adv;
}
return r;
}
题解:
我只能说想想确实是这样,具体为什么我也说不来。
本来想,max abs(最大-平均)。
不过:
这个情况i不满足,5 3 0 0 好像是前缀和看作一个整体那样,具体的更进一步的我也不会了。
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<int> m;
int sum=accumulate(m.begin(),m.end(),0);
if(sum%m.size()!=0) return -1;
int adv=sum/m.size();
int sum=0;
int maxx=0;
for(int i=0;i<m.size();i++)
{
sum+=adv-m[i];
maxx=max(maxx,abs(sum));
maxx=max(maxx,m[i]-adv);
}
return maxx;
}