有关二进制性质的一道好题
今天刷题遇到的一个好题
题目描述如下
这题用暴力可以过一半样例,但是明显有更优解,那么就要用到二进制的与运算和或运算的一些性质
首先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)

浙公网安备 33010602011771号