有关二进制性质的一道好题

今天刷题遇到的一个好题
题目描述如下image
这题用暴力可以过一半样例,但是明显有更优解,那么就要用到二进制的与运算和或运算的一些性质
首先x|y一定是大于x和y的,所以条件就只压缩到x+y>x|y,因为x|y=x+y-x&y,所以就可以转换为x&y>0,但是x&y>0情况较多,逆向思维去找x&y=0,那么只需要运用到组合数,就可知道如果有m个1,那么就有2**m-1个数满足条件,结果就显而易见了,python实现代码如下

点击查看代码
x=int(input())
y=bin(x)[2:].count('0')
t=2**y-1
print(x-t)
posted @ 2026-05-24 13:32  zidurile  阅读(22)  评论(0)    收藏  举报