link
线性基板子,求一个数列可以得到的第 k k k 小异或值。
int t = 0;int n;vector b;void insert(ull x) { for(auto i : b) x = min(x, x ^ i); for(auto& i : b) i = min(i, x ^ i); if(x) b.pb(x);}void solve() { printf("Case #%d:n", ++t); cin >> n; b.clear(); for(int i = 1; i <= n; i++) { ull x; cin >> x; insert(x); } int q; cin >> q; sort(b.begin(), b.end()); for(int i = 1; i <= q; i++) { ull k; cin >> k; if(b.size() < n) k--; ull ans = 0; for(auto i : b) { if(k & 1) ans ^= i; k >>= 1; } if(k == 0) { cout << ans << endl; } else { cout << -1 << endl; } }}