CF1325D Ehab the Xorcist
首先可以意识到,对于这个数组,他的异或和一定不会超过数值和
所以说 \(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\n%lld",u);
}
return 0;
}
lll ha=cha/2;
if((ha&u)==0){
printf("2\n%lld %lld",ha,ha^u);
}else{
printf("3\n%lld %lld %lld",ha,ha,u);
}
return 0;
}