参考代码:
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <vector>
#include <map>
#include <queue>
#include <set>
#include <ctime>
#include <cstring>
#include <cstdlib>
#include <math.h>
using namespace std;
typedef long long ll;
const int N = 1005;
const int maxn = 1e6 + 5;
ll bas[65], cnt;
void ins(ll x)
{
for (ll i = 60; ~i; i--)
{
if ((x >> i) & 1)
{
if (!bas[i])
{
cnt++;
bas[i] = x;
for (ll j = i - 1ll; j >= 0; j--)
if (((bas[i] >> j) & 1))
bas[i] ^= bas[j];
for (ll j = i + 1; j <= 60; j++)
if ((bas[j] >> i) & 1ll)
bas[j] ^= bas[i];
break;
}
else
x ^= bas[i];
}
}
}
ll q[maxn], ql;
void push()
{
ql = 0;
for (ll i = 0; i < 61; i++)
if (bas[i])
q[ql++] = bas[i];
}
ll query(ll k, ll n)
{
if (cnt != n)
k--;
if (k >= ((1ll << ql)))
return -1;
ll ans = 0;
for (ll i = 0; i < ql; i++)
if ((k >> i) & 1)
ans ^= q[i];
return ans;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
ll n, t, x;
cin >> t;
for (ll m = 1; m <= t; m++)
{
memset(bas, 0, sizeof bas);
cnt = 0;
cin >> n;
for (ll i = 0; i < n; i++)
cin >> x, ins(x);
push();
ll Q;
cout << "Case #" << m << ':' << endl;
cin >> Q;
while (Q--)
{
cin >> x;
cout << query(x, n) << endl;
}
}
}