CF1270C Make Good

\(\large{题目链接}\)
\(\\\)

题意:

\(t\)组询问,每组给出一个\(n\)个元素的序列,最多在这个序列中添加3个元素使得整个序列的和为异或和的二倍。
\(1 \leq t \leq 10^4, 1 \leq n \leq 10^5\)
\(\\\)

思路:

一道思维题。
多试几个数据,会发现,可以先求出最初的和与异或和。
然后在序列中添加和,那么异或和就变为了0,这时再在序列中添加当前的和即可。
\(\\\)

代码:

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

void solve() {
	int n, a;
	ll s = 0, x = 0;
	cin >> n;
	for (int i = 1; i <= n; ++i) {
		cin >> a;
		s += a;
		x ^= a;
	}
	cout << "2" << endl << x << " " << s + x << endl;
}

int main() {
	int t;
	cin >> t;
	for (; t; --t) solve();
	return 0;
}
上一篇:正则表达式


下一篇:VS 设置显示错误列表