B - Missing Number in Graph 解説 by maspy

すべての書き込み方を求める

本問を解くには不要ですが,本問の条件を満たすカードの配置をすべて求めることもできます.

まず「\(0\) 以上 \(N\) 以下」という条件を無視して \((A_1,\ldots,A_N)\) をひとつ求めたあと,次の問題を解くということになります.

\((A_1\oplus x, \ldots, A_N\oplus x)\)\(0, 1, \ldots, N\) のうち \(N\) 個を並べたものになるような \(x\) はどのようなものであるかを求めよ.

まず \(A_i\) が distinct であることが必要です.あとは条件を\(A_i\oplus x\leq N\) と言い換えて処理するのが簡単だと思います(distinct だとこれが十分条件になります).

  • Binary Trie などを用いて \(x\) に対して \(\max_i(A_i\oplus x)\) を求める.
  • \(i\) に対して \(A_i\oplus x\leq N\) となる \(x\) 全体を \(O(\log N)\) 個の区間の和集合として求める.

などを行えば条件を満たす \(x\) をすべて列挙できます.

投稿日時:
最終更新: