首页 > 试题广场 >

或与加

[编程题]或与加
  • 热度指数:5223 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给定 x, k ,求满足 x + y = x | y 的第 k 小的正整数 y 。 | 是二进制的或(or)运算,例如 3 | 5 = 7。

比如当 x=5,k=1时返回 2,因为5+1=6 不等于 5|1=5,而 5+2=7 等于 5 | 2 = 7。


输入描述:

每组测试用例仅包含一组数据,每组数据为两个正整数 x , k。 满足 0 < x , k ≤ 2,000,000,000。



输出描述:

输出一个数y。

示例1

输入

5 1

输出

2
m, k = map(int, input().split()) a = [] for i in range(m*k): if m+i == (m|i): a.append(i) print(a[k-1]) python才是永远的神
发表于 2021-03-05 23:01:31 回复(0)
Python 3

x, k = map(int, input().split())
bit = 1
ans = 0
while k:
    if x & 1 == 0:
        ans += bit*(k&1)
        k >>= 1
    x >>= 1
    bit <<= 1
print(ans)

编辑于 2018-08-24 15:59:53 回复(1)