首先可以意识到,对于这个数组,他的异或和一定不会超过数值和
所以说 (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;
}