#3802. 异或运算

异或运算

题目描述

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

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

输入格式

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

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

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

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

第四行包含Q Q 个整数k1,k2,,kQ k_1,k_2,…,k_Q,表示 QQ 个询问对应的 kk

输出格式

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

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

如果能得到的不同结果的总数少于ki k_i,则输出 −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

注意:只选取一个数字进行运算,则结果为该数字本身。

数据范围

  • 1N,Q100001≤N,Q≤10000
  • 1ki10181≤k_i≤10^{18}

来源

  • HDOJ3949
  • 算法竞赛进阶指南