Official

B - Hamming Distance is not 1 Editorial by vwxyz


整数 \(i\) に対して、ビットが立っている桁の個数を \(2\) で割った余りを \(P(i)\) と表すことにします。
また、ビットの桁目は \(\text{0-index}\) で表すことにします。

\(L\) が偶数または \(R\) が奇数のとき

\(2n\)\(2n+1\) の両方を \(S\) に含めることはできないことから、\(|S| \leq \lceil \frac{R-L+1}{2} \rceil\) です。 \(L\) 以上 \(R\) 以下の整数 \(i\) のうち、\(P(i)\)\(0,1\) のものの集合をそれぞれ \(E,O\) とすると、これらはいずれも条件を満たします。 \(|E|+|O|=R-L+1\) より、\(\max(|E|,|O|) \geq \lceil \frac{R-L+1}{2} \rceil\) なので、\(|S|\) の最大値は \(\lceil \frac{R-L+1}{2} \rceil\) であり、\(E\)\(O\) のうち要素数が大きい方が求めるものです。

\(L\) が奇数かつ \(R\) が偶数のとき

上と同様に考えて、\(\frac{R-L+1}{2} \leq |S| \leq \frac{R-L+1}{2}+1\) がわかります。 \(|S|=\frac{R-L+1}{2}+1\) となる \(S\) が構成できるときはそれが、そうでないときは \(E\) または \(O\) が求めるものです。

\(P(L)=P(R)\) のとき、\(\max(|E|,|O|)=\frac{R-L+1}{2}+1\) なので、\(E\)\(O\) のうち要素数が大きい方が求めるものです。

\(P(L) \neq P(R)\) のときを考えます。 \(L\)\(R\) でビットが異なる最上位の桁を \(k\) 桁目とします。

\(R<L+2^k\) のときを考えます。 \(L\) 以上 \(R\) 以下の整数 \(i\) のうち、

  • \(i\)\(k\) 桁目のビットが立っていなくて、\(P(L)=P(i)\)
  • \(i\)\(k\) 桁目のビットが立っていてて、\(P(R)=P(i)\)

のいずれかを満たすものの集合を \(S\) とすると、\(S\) は条件を満たし、\(|S| = \frac{R-L+1}{2}+1\) となることがわかるので、これが求めるものです。

\(L+2^k \leq R\) のとき、\(|S| \leq \frac{R-L+1}{2}\) を示します。
\(L\) 以上 \(R\) 以下の整数に対応する頂点を用意し、ビットが異なる桁の個数が \(1\) であるような \(2\) 頂点の組を辺を結んだ時、このグラフに完全マッチングがあることが示せればよいです。 (マッチングされたペアの一方しか選べないことからわかります。二部グラフにおける最大独立集合と最大マッチングの関係を考えても良いです。)
まず、\((L+1,L+2),(L+3,L+4),\dots,(R-2,R-1)\) をマッチングさせます。 \(L\) からいくつかのマッチングされた \(2\) 点を通りながら \(R\) にたどり着く経路が見つかれば、その経路に沿ってマッチングをずらすことができます。 \(k\) 桁目未満で \(L\)\(R\) のビットが異なる桁目を降順に並べたものを \(k_1,k_2,\dots,k_C\) とします。\(L\) から始めて、\(c=1,2,\dots,C\) の順に、今いる頂点が \(X\) のとき、\((X⊕2^{k_c},X⊕2^{k_c}⊕1)\) のペアを選び、頂点 \(X⊕2^{k_c}⊕1\) に移動します。 \(L+2^k \leq R\) より、\(L\)\(k_1\) 桁目のビットは立っておらず、\(R\)\(k_1\) 桁目のビットは立っていて、移動する頂点は常に \(L\) 以上 \(R\) 以下であることがわかります。 \(P(L) \neq P(R)\) から、移動後に頂点 \(R⊕2^k\) にいることがわかり、これは \(R\) と結ばれている頂点なので、完全マッチングが存在することが示せました。

posted:
last update: