Files
java-competitive/archive/2018.03/2018.03.10 - VK Cup 2018 - Round 1/TaskC.java
2019-03-15 13:47:54 +04:00

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