#gSXYlydlt30x3504. 异或运算 XOR

异或运算 XOR

题目描述

给定你由 NN 个整数构成的整数序列,你可以从中选取一些(至少一个)进行异或(xor)运算,从而得到很多不同的结果。

请问,所有能得到的不同的结果中第 kk 小的结果是多少。

输入格式

第一行包含整数 TT,表示共有 TT 组测试数据。

对于每组测试数据,第一行包含整数 NN

第二行包含 NN 个整数(均在 11101810^{18} 之间),表示完整的整数序列。

第三行包含整数 QQ,表示询问的次数。

第四行包含 QQ 个整数 k1,k2,,kQk_1,k_2,\dots,k_Q,表示 QQ 个询问对应的 kk

输出格式

对于每组测试数据,第一行输出 Case #C:,其中 CC 为顺序编号(从 11 开始)。

接下来 QQ 行描述 QQ 次询问的结果,每行输出一个整数,表示第 ii 次询问中第 kik_i 小的结果。

如果能得到的不同结果的总数少于 kik_i,则输出 1-1

样例

输入样例:

2
2
1 2
4
1 2 3 4
3
1 2 3
5
1 2 3 4 5

输出样例:

Case #1:
1
2
3
-1
Case #2:
0
1
2
3
-1

样例解释

第一个测试数据N=2N=2,数字为 1,21,2

可能的异或结果:

  • {1}\{1\}:1
  • {2}\{2\}:2
  • {1,2}\{1,2\}:1 xor 2 = 3

共 3 个不同结果。从小到大排序:1, 2, 3。

询问 k=1,2,3,4k=1,2,3,4

  • k=1k=1 → 1
  • k=2k=2 → 2
  • k=3k=3 → 3
  • k=4k=4 → -1(因为总共只有 3 个不同结果)

第二个测试数据N=3N=3,数字为 1,2,31,2,3

可能的异或结果:

  • {1}\{1\}:1
  • {2}\{2\}:2
  • {3}\{3\}:3
  • {1,2}\{1,2\}:1 xor 2 = 3(重复)
  • {1,3}\{1,3\}:1 xor 3 = 2(重复)
  • {2,3}\{2,3\}:2 xor 3 = 1(重复)
  • {1,2,3}\{1,2,3\}:1 xor 2 xor 3 = 0

不同结果:0, 1, 2, 3 共 4 个。从小到大:0, 1, 2, 3。

询问 k=1,2,3,4,5k=1,2,3,4,5

  • k=1k=1 → 0
  • k=2k=2 → 1
  • k=3k=3 → 2
  • k=4k=4 → 3
  • k=5k=5 → -1

数据范围

  • 1T1 \le T(未明确上限)
  • 1N,Q100001 \le N, Q \le 10000
  • 1ki10181 \le k_i \le 10^{18}
  • 整数取值范围 1ai10181 \le a_i \le 10^{18}

时空限制

  • 时间限制:1 秒
  • 空间限制:64 MB