专栏文章

题解:CF1991C Absolute Zero

CF1991C题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqa0o8p
此快照首次捕获于
2025/12/04 01:24
3 个月前
此快照最后确认于
2025/12/04 01:24
3 个月前
查看原文
既然替换后的数是与所选的数的差,那最佳选择肯定是最大值和最小值的平均值。时间复杂度 O(Qnlogn)O(Qn\log n)
CPP
const ll N = 2e5 + 10, MAX = 40, inf = 3e9;
ll Q, n, a[N];
vector<ll> ans;

int main() {
	sync_off;
	cin >> Q;

	count(Q) {
		ans.clear();
		cin >> n;
		ll min1 = inf, max1 = -inf, cnt = 0;

		rep(i, 1, n) {
			cin >> a[i];
			update(min1, a[i], min);
			update(max1, a[i], max);
		}

		while (1) {
			if (max1 == 0) {
				cout << ans.size() << '\n';

				if (ans.empty() == 0) {
					for (ll i : ans)
						cout << i << ' ';
				}

				endl;
				break;
			} else if (cnt == MAX) {
				cout << "-1\n";
				break;
			} else {
				ll x = (min1 + max1) / 2;
				ans.pb(x);
				min1 = inf;
				max1 = -inf;
				cnt++;

				rep(i, 1, n) {
					a[i] = abs(a[i] - x);
					update(min1, a[i], min);
					update(max1, a[i], max);
				}
			}
		}
	}
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...