这个题很好啊。。。(算是我很久没活跃思维的复健题了,,,,,)
首先很显然
当 u == v 直接输出 1 u
当 u> v 直接输出-1
u ==v == 0时候,直接输出0
u与v奇偶性不同,直接输出-1
这里要联系后面操作
你容易想起来 :
对吧。。。。
然后只要这么来就好了
此时有
所以此时当u,v奇偶性不同就是无解了好好想一下为什么。。(二进制这里可以自由变换。。。)
但注意到 有长度为2的情况。。。
想一下怎么样能有长度为2的情况
注意原来的式子是
此时x可以跟u合并,或者x可以跟x合并
当x与x合并,发现怎么来都是0
于是考虑U和x合并。。。
然后根据一个性质
就是当u和x二进制位没有相同的时候,异或相当于加法。。。
也就是说
当u和x二进制位没有相同的时候
那么此时,就可以缩减为长度2了。。。。。
我好菜啊。。。
我原来还想着。贪心。。。我看一眼C,做不得,单走一个D,,,,还wa6次。。。。
#include<bits/stdc++.h>
using namespace std;
unsigned long long u,v;
int main(){
cin>>v>>u;
if(v == 0 && u == 0){
cout<<0<<endl;
exit(0);
}
if(v == u){
cout<<1<<endl;
cout<<v<<endl;
exit(0);
}
if(v > u || (u%2) != (v%2)){
cout<<-1<<endl;
exit(0);
}
unsigned long long x = (u - v)/2;
if((x ^ v) == x + v){
cout<<2<<endl;
cout<<x + v<<" "<<x<<endl;
exit(0);
}
cout<<3<<endl;
cout<<v<<" "<<x<<" "<<x<<endl;
exit(0);
}