题目背景
原题链接:https://oier.team/problems/X12C。
题目描述
本题有 T 组测试数据。
有一个长度为 n 的非负整数序列 a 和两个参数 m,k。
你可以对序列 a 进行任意次数的操作,对于每次操作,你都需要:
- 选取一个非负整数 x 使得 x & m=x,选取一个下标 i∈[1,n],将 ai←ai ∣ x,然后你需要将 m←m−x 或者花费 k 的代价使得 m 不变。
记你花费的代价为 s,你需要求出 (⊕i=1nai)−s 的最大值。
其中 ∣ 代表按位或运算,& 表示按位与运算,⊕ 表示按位异或运算。
输入格式
本题有多组测试数据,第一行输入一个整数 T,表示数据组数。对于每组数据:
- 第一行,三个非负整数 n,m,k。
- 第二行,n 个非负整数 a1,…,an。
输出格式
对于每组数据,输出一行一个整数表示你的答案。
1
1 2 0
1
3
3
7 354 480097
1 794 0 19 45 45 1
5 109588 312
1 16 34 375 47
1 333 0
646640
875
109951
646653
提示
【样例解释 #1】
进行操作 i=1,x=2,然后将 a1←a1 ∣ 2,然后选择花费 k=0 的代价将 m 不变,在此之后 m=2,容易发现之后的所有操作不会将答案变大,因此最大值为 a1−s=3−0=3。
【数据范围】
本题使用捆绑测试。
对于 100% 的数据,1≤T≤106,1≤n,∑n≤106,0≤ai,m,k≤109。
子任务编号 |
n≤ |
m≤ |
k≤ |
ai≤ |
特殊性质 |
分值 |
1 |
109 |
109 |
109 |
无 |
11 |
2 |
106 |
0 |
7 |
3 |
109 |
0 |
17 |
4 |
109 |
0 |
12 |
5 |
10 |
106 |
T=1 |
13 |
6 |
103 |
17 |
7 |
106 |
109 |
无 |
23 |