求一个长度最短的数组,异或$=u$,其和$=v$
因为和会进位所以$v>u$,
考虑进位产生的$v-u$,一定由原本数组里面二进制$1,1产生$进位不可能是奇数。设$p=(v-u)/2$
如果$p\&u =0$表示进位的数与$u$二进制无关,那么只需要$p,p|u$。进位的就可以加上了。
如果$p\&u !=0$表示进位的数与$u$二进制有关,重复到的二进制就需要有个新的$1$平衡。那么只需要$p,p|u,u\&p$。
代码
1 |
|
求一个长度最短的数组,异或$=u$,其和$=v$
因为和会进位所以$v>u$,
考虑进位产生的$v-u$,一定由原本数组里面二进制$1,1产生$进位不可能是奇数。设$p=(v-u)/2$
如果$p\&u =0$表示进位的数与$u$二进制无关,那么只需要$p,p|u$。进位的就可以加上了。
如果$p\&u !=0$表示进位的数与$u$二进制有关,重复到的二进制就需要有个新的$1$平衡。那么只需要$p,p|u,u\&p$。
1 | #include <iostream> |