#L0538. 位运算最大化

位运算最大化

题目描述

小明有一个长度为 nn 的序列 aa 和一个正整数 mm。保证对于所有 1in1 \le i \le n,均有 0ai<2m0 \le a_i \lt 2^m

对于序列 aa,小明定义其「与值」等于:

$$a_1 \text{ and } a_2 \text{ and } \cdots \text{ and } a_n$$

即序列 aa 中所有数按位与得到的结果。

小明定义一次「左移」操作为:

  • 选择一个不大于 nn 的正整数 ii,将 aia_i 的值修改为 (2ai)mod2m(2 \cdot a_i) \bmod 2^m

小明希望进行若干次「左移」操作(可以为 00 次),使序列 aa 的「与值」尽可能大。

你需要帮助他求出,使序列 aa 的「与值」达到最大值所需的「左移」操作次数的最小值。

输入格式

本题有多组测试数据。

输入的第一行包含两个整数 c,tc,t,分别表示该测试点所属的子任务编号和测试数据组数。样例满足 c=0c=0

接下来依次输入每组测试数据。对于每组测试数据:

  • 第一行包含两个整数 n,mn,m
  • 第二行包含 nn 个整数 a1,,ana_1,\dots,a_n

输出格式

对于每组测试数据,输出一行,包含一个整数,表示使序列 aa 的「与值」达到最大值所需的「左移」操作次数的最小值。

样例

0 4
3 4
1 3 8
2 3
4 0
3 5
3 6 11
3 4
5 7 13
5

0 8 3

</p>

提示

样例 1 解释

对于第 11 组测试数据,可以选择 i=1i=1 进行 33 次操作,再选择 i=2i=2 进行 22 次操作,使序列变为 {8,12,8}\{8,12,8\},「与值」等于 88。可以证明「与值」所能达到的最大值即为 88,且至少需要 55 次操作。

对于第 22 组测试数据,无论怎么操作,「与值」都为 00,因此答案为 00

数据范围

n\sum n 表示单个测试点中 nn 的和。

对于所有测试数据,均有:

  • 1t51051 \le t \le 5\cdot10^5
  • 1n51051 \le n \le 5\cdot 10^51m601 \le m \le 60n5105\sum n \le 5\cdot10^5
  • 对于所有 1in1 \le i \le n,均有 0ai<2m0 \le a_i \lt 2^m

本题采用捆绑测试。

  • Subtask 1(15 points):n,m8n,m \le 8n8\sum n \le 8
  • Subtask 2(18 points):n103n \le 10^3m10m \le 10n103\sum n \le 10^3
  • Subtask 3(21 points):n104n \le 10^4m20m \le 20n104\sum n \le 10^4
  • Subtask 4(21 points):n105n \le 10^5m30m \le 30n105\sum n \le 10^5
  • Subtask 5(25 points):无特殊限制。
难度 普及+/提高-
通过率
尝试 0
已通过 0
ID
1266
类型
传统题
Time Limit
1000ms
Memory Limit
512MiB
上传者