给你两个数 u v,要求找出一个数组,里面的元素满足几个条件
根据u^0==u 同时知道两个相同的数异或为0 ,可以把0换成(v-u)/2 和 (v-u)/2 ;因此,最多只需要三个数(v-u)/2,(v-u)/2,u;
把上边的三个元素种的u和其中一个(v-u)/2合并 就得到了两个数,(v-u)/2,(v+u)/2可知如果这连个数字满足要求那么就只需要两个数。
#include<bits/stdc++.h> using namespace std; int main(){ long long u,v; cin>>u>>v; if(u==v&&v!=0){ cout<<1<<endl<<v<<endl; } else if(u==v&&v==0){ cout<<0<<endl; } else if((v-u)%2||v<u){ cout<<-1<<endl; } else { if((((v-u)/2)^((v+u)/2))==u){ cout<<2<<endl; cout<<(v-u)/2<<" "<<(v+u)/2<<endl; } else{ cout<<3<<endl; cout<<u<<" "<<(v-u)/2<<" "<<(v-u)/2<<endl; } } }
原文:https://www.cnblogs.com/LH2000/p/12503125.html