zcmimi's blog
avatar
zc
2020-04-27 12:37:00
  • 本文总阅读量
查看原题

点击跳转

很妙的构造题

首先,可以发现异或和明显不大于总和

第二,如果异或和与总和的奇偶不同,那么无解(二进制下最低位不同,没法用进位来填充)

剩下的就都可以构造了

u=v的时候,输出u就可以了,当u=0的时候记得特判

x=\frac{u+v}2

那么\left\{x,x,u\right\}就一定可以满足

如果x \And u=0的时候\left\{x,u\right\}等价于\left\{x+u\right\}

那么\left\{x,x+u\right\}可以满足

#include<bits/stdc++.h>
int main(){
    long long a,b,x;scanf("%lld%lld",&a,&b);
    if(a>b||(a&1)!=(b&1))return printf("-1\n"),0;
    if(a==b){
        if(!a)printf("0\n");
        else printf("1\n%lld\n",a);
    }
    else{
        x=b-a>>1;
        if(x&a)printf("3\n%lld %lld %lld\n",x,x,a);
        else printf("2\n%lld %lld\n",x,a|x);
    }
}
LG CF1325D Ehab the Xorcist
comment评论
Search
search