CF1325D Ehab the Xorcist

Jisoo

首先可以意识到,对于这个数组,他的异或和一定不会超过数值和

所以说 (u>v) 直接挂了

然后意识到,区间和的奇偶性和异或和是一样的,(看第一位),这样(u!=v)也不行

剩下的呢,可以直接构造 (u,frac{v-u}{2},frac{v-u}{2})(已经保证了分子为偶数)

然后能不能更少呢?看一下能不能把 (frac{u-v}{2})(u)合并就可以了

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define lll long long
using namespace std;
lll u,v;
lll cha;
int main(){
	cin>>u>>v;
	cha=v-u;
	if(cha<0||(cha&1)){
		printf("-1");
		return 0;
	}
	if(u==v){
		if(u==0){
			printf("0");
			return 0;
		}
		else{
			printf("1
%lld",u);
		}
		return 0;
	}
	lll ha=cha/2;
	if((ha&u)==0){
		printf("2
%lld %lld",ha,ha^u);
	}else{
		printf("3
%lld %lld %lld",ha,ha,u);
	}
	return 0;
}
原文地址:https://www.cnblogs.com/For-Miku/p/15342286.html