比赛 2026.8.28 评测结果 AAAAAAAAAA
题目名称 一周一次买下同班同学的那些事 最终得分 100
用户昵称 赵飞羽 运行时间 0.368 s
代码语言 C++ 内存使用 5.32 MiB
提交时间 2026-08-28 11:34:52
显示代码纯文本
#include <bits/stdc++.h>
#define int long long
using namespace std;

constexpr int N = 200010;
int t, n, a[N], s[N], b[N], ans, idx, k, op[N*2];

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
	freopen("bought.in", "r", stdin);
	freopen("bought.out", "w", stdout);
	cin >> t;
	while (t--) {
		k = 0;
		cin >> n;
		for (int i = 1; i <= n; i++) {
			cin >> a[i];
			s[i] = s[i-1] + a[i];
			b[i] = b[i-1] + abs(a[i]);
		}
		ans = s[n];
		idx = 1;
		for (int i = 2; i <= n; i++) {
			if (a[i] > 0) {
				if (b[i-1] + s[n] - s[i] - a[i] > ans) {
					idx = i;
					ans = b[i-1] + s[n] - s[i] - a[i];
				}
			}
		}
		for (int i = 1; i <= idx - 2; i++) {
			if (a[i] > 0 && a[i+1] < 0) op[++k] = i;
			else if (a[i] < 0 && a[i+1] > 0) {
				op[++k] = i + 1;
				op[++k] = i;
				a[i+1] = -a[i+1];
			}
			if (a[i] > 0) a[i] = -a[i];
		}
		if (a[idx-1] < 0) op[++k] = idx;
		cout << k << "\n";
		for (int i = 1; i <= k; i++) cout << op[i] << " ";
		cout << "\n";
	}
	return 0;
}