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