(Good Bye 2019) Codeforces 1270C Make Good

题目链接:

Codeforces 1270 C Make Good

思路:

设已有的所有数相加得到x,异或得到y
第一步我们在尾部附加y,现在两个数为x+y和0;
第二步我们在尾部附加x+y,现在两个数为2(x+y)和x+y;
这样就符合题意了~

代码:

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> P;
typedef long long ll;
#define fi first
#define sc second
#define pb(a) push_back(a)
#define mp(a,b) make_pair(a,b)
#define pt(a) cerr<<a<<"---
"
#define rp(i,n) for(int i=0;i<n;i++)
#define rpn(i,n) for(int i=1;i<=n;i++)
int main(){
	ios::sync_with_stdio(false); cin.tie(nullptr);
	int t; cin>>t;
	while(t--){
		int n; cin>>n;
		ll x=0,y=0;
		rp(i,n){
			ll a; cin>>a; 
			x+=a; y^=a;
		}
		if(x==(y<<1)){
			cout<<0<<'
'<<'
';
		}else{
			cout<<2<<'
'<<y<<' '<<x+y<<'
';
		}
	}
	return 0;
}
原文地址:https://www.cnblogs.com/yuhan-blog/p/12308708.html