Official

F - Coprime Solitaire Editorial by leaf1415


\(0\) または \(1\) の値をとる \(N\) 個の論理変数 \(W_1, W_2, \ldots, W_N\) を考えます。また、\(i = 1, 2, \ldots, N\) について、 \(i\) 番目のカードの表の整数が見える状態を \(W_i =1\) に、裏の整数が見える状態を \(W_i = 0\) に対応させます。

一般に、論理変数 \(W\) およびその否定 \(\lnot W\)リテラルと呼ばれます。ここでは、\(i\) 番目のカードの「おもて面に対応するリテラル」を \(W_i\)\(i\) 番目のカードの「裏面に対応するリテラル」を \(\lnot W_i\) と定めます。 そして、素数 \(p\) に対して、\(p\) を素因数に持つ整数が書かれた面に対応するリテラルをすべて並べたものを、\(X_{p, 1}, X_{p, 2}, \ldots, X_{p, k_p}\) とします。 (つまり、\(X_{p, 1}, X_{p, 2}, \ldots, X_{p, k_p}\) にはそれぞれ \(W_1, \lnot W_1, W_2, \lnot W_2, \ldots, W_N, \lnot W_N\) のいずれかが入ることになります。)

高橋君がうれしい気持ちになる必要十分条件は、「任意の素数 \(p \,\,(\leq 2 \times 10^6)\) について、\(p\) を素因数に持つ整数が高々 \(1\) 個しか見えない」ことです。 これは「任意の素数 \(p \,\,(\leq 2 \times 10^6)\) について、\(X_{p, 1}, X_{p, 2}, \ldots, X_{p, k_p}\) のうち値が \(1\) であるものは高々 \(1\) 個である」 ことに対応します。
\(X_{p, 1}, X_{p, 2}, \ldots, X_{p, k_p}\) のうち値が \(1\) であるものは高々 \(1\) 個である」ことは、次のように言い換えられます。

\(X_{p, 1}, X_{p, 2}, \ldots, X_{p, k_p}\) のうち値が \(1\) であるものは高々 \(1\) 個である。
\(\Leftrightarrow\) \(1 \leq i < j \leq k_p\) を満たす任意のペア \((i, j)\) について、\(X_{p, i}, X_{p, j}\) のうち値が \(1\) であるものは高々 \(1\) 個である。
\(\Leftrightarrow\) \(1 \leq i, j \leq k_p\) かつ \(i \neq j\) を満たす任意のペア \((i, j)\) について、\(X_{p, i} = 1\) ならば \(X_{p, j} = 0\) である。
\(\Leftrightarrow\) \(1 \leq i, j \leq k_p\) かつ \(i \neq j\) を満たす任意のペア \((i, j)\) について、論理式 \((X_{p, i} \rightarrow \lnot X_{p, j})\) の値が \(1\) である。 (ただし、\(X \rightarrow Y\)\(\lnot X \lor Y\) を表す。)
\(\Leftrightarrow\) 論理式 \(F_p := \displaystyle\bigwedge_{1 \leq i, j \leq k_p, i \neq j} (X_{p, i} \rightarrow \lnot X_{p, j})\) の値が \(1\) である。

よって、高橋君がうれしい気持ちになる必要十分条件は、 任意の素数 \(p \,\,(\leq 2 \times 10^6)\) で上記の論理式 \(F_p\) の値が \(1\) であることです。すなわち、

論理式 \(F := \displaystyle\bigwedge_{p:素数, p \leq 2\times 10^6} F_p = \displaystyle\bigwedge_{p:素数, p \leq 2\times 10^6} \displaystyle\bigwedge_{1 \leq i, j \leq k_p, i \neq j} (X_{p, i} \rightarrow \lnot X_{p, j})\)

の値が \(1\) であることです。
したがって、この問題は上記の論理式 \(F\) の値が \(1\) になるように各カードの表裏を決定できるか(論理変数 \(W_1, W_2, \ldots, W_N\) の値を割り当てられるか)、すなわち論理式 \(F\) が充足可能かどうかを判定する「充足可能性問題(SAT)」に帰着されます。

一般に、有限個のリテラルを論理和 \(\lor\) で結合したものはと呼ばれます。
一般に充足可能性問題は効率的な解法が知られていませんが、高々 \(2\) 個のリテラルからなる\(M\)個の節を論理積 \(\land\) で結合した形の論理式に関する充足可能性問題(2-SAT)は、\( \mathrm{O}(M)\) 時間で解くことができます。
2-SATを解くアルゴリズムは、AtCoder Library (ACL) に実装されているものを用いることができます。(2-SATを解くアルゴリズムの詳細は他の文献に譲ります。)
\(F\) はすべての節が \(2\) 個のリテラルからなる( \(X \rightarrow Y\)\(\lnot X \lor Y\) を表すことに注意してください。)ため、この問題は2-SATとして解けます。
しかし、素数 \(p \,\,(\leq 2 \times 10^6)\) について、\(F_p\) は最大で \(2N(2N-1)\) 個の節を持つため、このままでは実行時間制限に間に合いません。

そこで、\(F_p\) が持つ節の個数を削減することを考えます。
まず、補助的な論理変数 \(Y_{p, 1}, Y_{p, 2}, \ldots, Y_{p, k_p}\) および \(Z_{p, 1}, Z_{p, 2}, \ldots, Z_{p, k_p}\) を追加します。 そして、論理式 \(F_p\) の代わりとなる論理式 \(F'_p\) を、

\(F'_p := \displaystyle\bigwedge_{1 \leq i \leq k_p} (Y_{p, i} \rightarrow \lnot X_{p, i}) \land \displaystyle\bigwedge_{2 \leq i \leq k_p} (Y_{p, i} \rightarrow Y_{p, i-1}) \land \displaystyle\bigwedge_{2 \leq i \leq k_p} (X_{p, i} \rightarrow Y_{p, i-1}) \land \displaystyle\bigwedge_{1 \leq i \leq k_p} (Z_{p, i} \rightarrow \lnot X_{p, i}) \land \displaystyle\bigwedge_{1 \leq i \leq k_p-1} (Z_{p, i} \rightarrow Z_{p, i+1}) \land \displaystyle\bigwedge_{1 \leq i \leq k_p-1} (X_{p, i} \rightarrow Z_{p, i+1})\)

で定め、\(F' := \displaystyle\bigwedge_{p:素数, p \leq 2\times 10^6} F'_p\) とおくと、

\(F'\) が充足可能 \(\Leftrightarrow\) \(F\) が充足可能

が成り立ちます。 よって、論理式 \(F\) に対する2-SATを解くことは、論理式 \(F'\) に対する2-SATを解くことと等価です。
素数 \(p\) について、\(F'_p\) が持つ節の個数は \(\mathrm{O}(k_p)\) 個であるので、\(F'\) が持つ節の個数は \(\mathrm{O}(\sum_{p:素数, p \leq 2\times 10^6}k_p) = \mathrm{O}(N \log L)\) 個です。(ただし \(L\)\(A_i, B_i\) の最大値)
したがって、論理式 \(F'\) に対する2-SATを解くことでこの問題に正解することができます。

posted:
last update: