这个题可以理解为贪心。思路是每一堆多的牌全部移到下一堆,少的牌全部由下一堆提供。这样可能会出现下一堆的牌不够,移动之后为负数的情况。不过这并不影响最优解,因为下一堆可由后面的堆提供。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N = 110;
int a[N];
int s, n, ans;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
s += a[i];
}
s /= n;
for (int i = 0; i < n - 1; i++) {
if (a[i] != s) {
a[i + 1] += a[i] - s;
ans++;
}
}
cout << ans;
return 0;
}