欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

210.异或运算

时间:2023-05-28

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; } }}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。