Official

B - XOR Matching 2 Editorial by camypaper


\(\oplus\) をビットごとの排他的論理和を表す記号とします。

\(x\) を決めたとき、\(a_i \oplus b_i = x\) となるように \(b\) を並び替えることができるかどうかは \(c_i = a_i \oplus x\) として、\(b\)\(c\) が並び替えて一致することと同値です。これはソートなどにより \(O(N \log N)\) で判定可能です。

\(x\) の候補として \(a_1 \oplus b_1, a_1 \oplus b_2, \ldots, a_1 \oplus b_N\)\(N\) 通りを試せば十分です。

全体として時間計算量 \(O(N^{2} \log N)\) で全てのよい数を列挙可能で十分高速です。

posted:
last update: