原题解链接: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;
}

 京公网安备 11010502036488号
京公网安备 11010502036488号