ARC124 B - XOR Matching 2(思維)
阿新 • • 發佈:2021-08-04
目錄
Description
尋找 x,使得存在一種排列 $a[i] ;XOR ; b[i] =x,(1<=i<=n) $,輸出所有滿足的 x
State
\(1<=a[i],b[i]<=2^{30}\)
\(1<=n<=2000\)
Input
3
1 2 3
6 4 7
Output
1
5
Solution
資料範圍並不是很大,\(x=a[1] \ XOR \; b[i]\),這樣列舉所有可能滿足條件的 \(x\) 值,然後逐一判斷,所以內層的複雜度最大隻能是 \(O(nlogn)\)。
既然知道了 \(x\) 的值,每一個 \(i\) 對應的 \(x \; XOR \; a[i]\) 都會對應一個 \(b[j]\),利用桶 \(O(n)\) 就可以了
Code
const int N = 2e5 + 5; ll n, m, _; int i, j, k; ll a[N]; ll b[N]; map<int, int> mp; signed main() { //IOS; while(~ sd(n)){ rep(i, 1, n){ sd(a[i]); mp[a[i]] ++; } vector<int> res, ans; rep(i, 1, n){ sd(b[i]); res.pb(b[i] ^ a[1]); } sort(res.begin(), res.end()); res.erase(unique(res.begin(), res.end()), res.end()); for(auto it : res){ map<int, int> num = mp; int ok = 1; rep(i, 1, n){ num[it ^ b[i]] --; if(num[it ^ b[i]] < 0){ ok = 0; break; } } if(ok){ ans.pb(it); } } pd(ans.size()); for(auto it : ans){ pd(it); } } return 0; }