该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
按位与
题目描述
小 R 有 n 个非负整数 a1,a2,…,an。
小 X 给了小 R 一个正整数 m,并要求小 R 从这 n 个非负整数中选出恰好 m 个,使得选出的 m 个数的二进制按位与的值最大。
两个非负整数的按位与:把两个数写成二进制(高位补零到相同长度),逐位比较,两位都为 1 时结果的这一位为 1,否则为 0。例如 3&5=1。C++ 中按位与写作 &。
你需要帮助小 R 求出,他能选出的 m 个数的按位与的最大值。
输入格式
从文件 and.in 中读入数据。
输入的第一行包含两个正整数 n,m。
输入的第二行包含 n 个非负整数 a1,a2,…,an。
输出格式
输出到文件 and.out 中。
输出一行一个非负整数,表示小 R 能选出的 m 个数的按位与的最大值。
4 2
3 15 12 12
12
样例 1 解释
小 R 有 4 个非负整数:3,15,12,12。
- 若小 R 选择 3,15,则按位与的值为 3&15=3;
- 若小 R 选择 3,12,则按位与的值为 3&12=0;
- 若小 R 选择 15,12,则按位与的值为 15&12=12;
- 若小 R 选择 12,12,则按位与的值为 12&12=12。
因此,小 R 能选出的 m 个数的按位与的最大值为 12。
3 3
31 15 7
7
样例 2 解释
若小 R 选择 31,15,7,则按位与的值为 31&15&7=7。可以证明,小 R 能选出的 m 个数的按位与的最大值为 7。
样例 3
见 and3.in 与 and3.ans。
数据范围
对于所有测试数据,保证:
- 1≤m≤n≤2×105;
- 对于所有 i(1≤i≤n),0≤ai<230。
子任务
本题共 20 个测试点,按测试点计分:
| 测试点 |
分值 |
每个测试点 |
特殊性质 |
| 1∼4 |
20 |
5 |
n≤10 |
| 5∼8 |
n≤2000,ai<210 |
| 9∼12 |
n≤2000,ai<230 |
| 13∼16 |
n≤2×105,ai<220 |
| 17∼20 |
n≤2×105,ai<230 |
每个测试点单独评分,全部测试点的得分之和即为本题得分。