60分,求助
查看原帖
60分,求助
726139
残阳如血楼主2023/9/23 16:10

代码,贪心思想

#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;
}
2023/9/23 16:10
加载中...