题目链接
思路:硬是根据样例来猜结论。。。
首先u+t+t=v,这个肯定是一组答案,因为t^t=0,那么就来考虑一下能不能把长度给缩小,把u+t和t给判断一下就行。至于什么情况下无解呢?就是u>v或者u和v奇偶性不同的时候。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
const int maxn=2e5+1;
int mx,id,n,cnt=1,a[maxn],b[maxn],r[maxn];
map<int,int>p[maxn];
vector<int>g[maxn];
int main()
{
ll x,y;
cin>>x>>y;
if(x>y||(y-x)&1) {printf("-1\n");return 0;}
if(x==y&&y==0){
printf("0\n");return 0;
}
if(x==y&&y!=0){
cout<<1<<endl;
printf("%lld\n",x);return 0;
}
ll t1=(y-x)/2,t2=(y+x)/2;
if((t1^t2)==x&&(t1+t2==y)){
cout<<2<<endl;
cout<<t1<<" "<<t2<<endl;
return 0;
}
cout<<3<<endl;
cout<<x<<" "<<t1<<" "<<t1<<endl;
}