🐶同学正在研究二进制的奥秘,他发现对于一个给定的正整数,如果允许修改它的二进制表示中的某一位(将0改成1,或将1改成0),可以得到一个新的数字。
他邀请你完成以下挑战:
可以在任意位置上进行修改,但是必须恰好进行x次,且不能修改这个数字的二进制位数,同时要最大化最后的值。
如果你能完成挑战,那么将被授予“数字改造大师”称号。
(小瘪三,不用看了,在我这里)
输入描述:
第一行一个正整数
)
, 表示测试组数。
对于每组测试,第一行一个整数
)
,表示需要被改造的数字和允许的改造次数。
输出描述:
对于每组测试输出一个整数,表示被改造后的数字。
示例1
说明
二进制下的1为1,改造最后一位可以得到0,即十进制下的0
二进制下的2为10,改造最后一位可以得到11,即十进制下的3
备注:
注意本题为多测,即首先需要读入测试样例数,例如本题的输入模板如下
int tt;
std::cin >> tt;
while (tt--) {
int n, x;
std::cin >> n >> x;
}