#670. 最大或 1 数
最大或 1 数
题目描述
给定一个包含 个非负整数的数组。
你需要回答 个互相独立的情形。第 个情形中,允许你最多执行 次如下操作:
- 选择数组的任意一个元素,将其加 。
你的目标是使整个数组按位或(bitwise OR)后的结果中二进制位为 的个数最大化。对于每个情形,求能得到的最大 的位数。
输入格式
输入包含多个测试用例。第一行一个整数 ()——测试用例个数。随后描述各测试用例。
每个测试用例格式如下:
- 第一行包含两个整数 和 ()——数组大小与情形数。
- 第二行包含 个整数 ()——数组元素。
- 接下来的 行,每行包含一个整数 ()——第 个情形允许的最多操作次数。
保证所有测试用例中 且 。
输出格式
对于每个测试用例,输出 行,第 行为在第 个情形中能得到的最多的二进制 位数。
样例输入
3
1 3
0
0
2
4
2 2
1 3
0
3
2 1
1000000000 1000000000
1000000000
样例输出
0
1
2
2
3
31
说明
样例 1 解释
- 第一个情形:不能做操作,原数组 OR 为 ,有 个 位。
- 第二个情形:允许 次操作,把 加 两次得 ,二进制 ,有 个 位,是最优。
- 第三个情形:允许 次操作,把 加 三次得 ,二进制 ,有 个 位,是最优。
样例 2 解释
- 第一个情形:不做操作,原数组 OR 为 ,有 个 位。
- 第二个情形:允许 次操作,可以对 加 三次使 OR 的 位数达到 。