代码,贪心思想
#include <iostream>
#include <vector>
int main() {
int N, tar = 0, ans = 0; std::cin >> N;
std::vector<int> A(N + 1);
for (int i = 1; i <= N; ++i) std::cin >> A[i], tar += A[i];
tar /= N;
for (int i = 1; i <= N; ++i) {
if (A[i] <= tar && A[i] > tar) continue;
int j = i - 1;
while (j >= 1) {
if (A[j] >= tar) {
--j; continue;
}
if (A[i] - (N - A[j]) < tar) {
A[j] += A[i] - tar, ++ans;
break;
}
A[i] -= tar - A[j], A[j] = tar, ++ans, --j;
}
if (A[i] == tar) continue;
j = i + 1;
while (j <= N && A[i] > tar) {
if (A[j] >= tar) {
++j; continue;
}
if (A[i] - (N - A[j]) < tar) {
A[j] += A[i] - tar, ++ans;
break;
}
A[i] -= tar - A[j], A[j] = tar, ++ans, ++j;
}
}
std::cout << ans;
return 0;
}