题目链接
https://www.acwing.com/problem/content/212/
#include<bits/stdc++.h> using namespace std; #define ll long long #define ull unsigned long long const int p=1e9+7; const int N=10100; ull a[N]; int main() { int T,n,t,m,kase=0; cin>>T; while(T--) { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } bool zero=0; t=n; for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) if(a[j]>a[i]) swap(a[i],a[j]); if(a[i]==0) { zero=1,t=i-1;break; } for(int k=63;k>=0;k--) { if(a[i]>>k&1) { for(int j=1;j<=n;j++) { if(i!=j&&(a[j]>>k&1)) a[j]^=a[i]; } break; } } } cin>>m; printf("Case #%d: ",++kase); while(m--) { ull k,ans=0; cin>>k; if(zero) k--; if(k>=(1llu<<t)) puts("-1"); else { for(int i=t-1;i>=0;i--) { if(k>>i&1) ans^=a[t-i]; } cout<<ans<<" "; } } } return 0; }