87 lines
1.6 KiB
Java
87 lines
1.6 KiB
Java
package chelper;
|
|
|
|
import io.InputReader;
|
|
import io.OutputWriter;
|
|
import misc.SimpleSavingChelperSolution;
|
|
|
|
|
|
public class TaskC extends SimpleSavingChelperSolution {
|
|
|
|
public void solve(int testNumber, InputReader in, OutputWriter out) {
|
|
wrapSolve(testNumber, in, out);
|
|
}
|
|
|
|
int m = 31;
|
|
|
|
class Node {
|
|
Node child0;
|
|
Node child1;
|
|
|
|
int count = 0;
|
|
|
|
void add(boolean[] x, int i) {
|
|
count++;
|
|
|
|
if (i == m) {
|
|
return;
|
|
}
|
|
|
|
if (x[i]) {
|
|
if (child1 == null) {
|
|
child1 = new Node();
|
|
}
|
|
child1.add(x, i + 1);
|
|
} else {
|
|
if (child0 == null) {
|
|
child0 = new Node();
|
|
}
|
|
child0.add(x, i + 1);
|
|
}
|
|
}
|
|
|
|
int remove(boolean[] desired, int i) {
|
|
count--;
|
|
|
|
if (i == m) {
|
|
return 0;
|
|
}
|
|
|
|
Node child = desired[i] ? child1 : child0;
|
|
boolean node = (child != null && child.count > 0) == desired[i];
|
|
|
|
int r = node ? child1.remove(desired, i + 1) : child0.remove(desired, i + 1);
|
|
int add = (node ? 1 : 0) * (1 << (m - i - 1));
|
|
|
|
return r + add;
|
|
}
|
|
}
|
|
|
|
boolean[] explode(int x) {
|
|
boolean[] res = new boolean[m];
|
|
for (int i = 0; i < m; i++) {
|
|
res[m - i - 1] = x % 2 == 1;
|
|
x /= 2;
|
|
}
|
|
return res;
|
|
}
|
|
|
|
@Override
|
|
public void solve(int testNumber) {
|
|
int n = in.nextInt();
|
|
|
|
Node root = new Node();
|
|
|
|
int[] want = in.nextIntArray(n);
|
|
|
|
for (int i = 0; i < n; i++) {
|
|
root.add(explode(in.nextInt()), 0);
|
|
}
|
|
|
|
for (int i = 0; i < n; i++) {
|
|
int x = root.remove(explode(want[i]), 0) ^ want[i];
|
|
out.print(x + " ");
|
|
}
|
|
out.println();
|
|
}
|
|
}
|