原题解链接:https://ac.nowcoder.com/discuss/827158
给出两种构造方式:
- 考虑 的每一位,如果当前位为 ,则不对答案产生影响;如果当前位为 ,又因为 ,所以把 其中两个按位或上 即可。
当然这两种方式并无什么不同。无解的情况是 。
#include<bits/stdc++.h>
int ans[3],d;
signed main() {
scanf("%d",&d);
if((d&-d)==d) return puts("-1"),0;
for(int now=0; d; d^=d&-d) ans[now]|=d&-d,ans[(now+=1)%=3]|=d&-d;
printf("%d %d %d\n",ans[0],ans[1],ans[2]);
return 0;
}
#include<bits/stdc++.h>
int d;
signed main() {
scanf("%d",&d);
if((d&-d)==d) return puts("-1"),0;
printf("%d %d %d\n",d,(d&-d),d-(d&-d));
return 0;
}