由于 ai<212,所有可能的异或值只有 V=212=4096 种。
设对于每个异或值 x,计算:
用 0/1 背包风格的转移(每次只在异或维度上转移):
现有n件装备,每件装备具有相同的基础属性b,以及不同的特殊属性,其中,第i件装备的特殊属性为ai。
如果你选择了其中的t件装备(注意不可以重复选),记它们对应的特殊属性为 ai1,ai2,...,ait,那么你的总属性加成为:
$$(a_{i_1}\ xor\ a_{i_2}\ xor···xor\ a_{i_t}) +b×t $$你希望在获得最大属性加成的前提下,使得所选装备的件数t尽可能最少;当然,你也可以不选任何装备,此时属性加成为0。请同时输出最少的装备数量和最大属性加成。
[名词解释]
每个测试文件均包含多组测试数据。第一行输入一个整数T(1≦T≦20)代表数据组数,每组测试数据描述如下:
第一行输入两个整数n和b(1≦n≦103,−25≦b≦25)。
第二行输入n个整数a1,a2,...,an(0≦ai<212)。
除此之外,保证单个测试文件的n之和不超过103
对于每一组测试数据,新起一行。输出两个整数,表示最少的装备数量和最大属性加成。注意,首要前提是属性加成最大,其次才是装备数量最少。
输入
2
3 1
1 2 3
2 -1
0 0
输出
2 5
0 0
说明
对于第一组测试数据,选择第一、二件装备时,特殊属性异或和为1 xor 2=3,加上基础属性b×2=2,得到总属性5。我们可以证明,其他选择无法超过5。
对于第二组测试数据,不选任何装备时,属性为0;而选择任何一件时,属性为−1;选择两件时,属性为−2。因此最大属性为0,最小装备数为0