Official

G - D. D. Construction Editorial by Alt3


入力される行列を\(A\)として、\(\{1,2,\cdots,N\}\) の部分集合 \(S\) に対して、

\(I_S = \begin{cases} A_{ij}  (i\in Sかつj\in S、または i \notin Sかつj \notin S )\\ -A_{ij}  (\text{otherwise}) \end{cases} \)

と定めて、\(2^N\)個ある全ての部分集合\(S\)について、\(I_S\)を出力するとACが得られます。

以下では正当性を証明します。

\(M\)の条件

\(M=2^N \leq 256\)です。

・行列式の条件

\(I_S\)\(A\) に対して以下の操作を \(1\leq i \leq N\) について行うことで得られる行列です。

操作: \(i \in S\) ならば \(A\)\(i\) 行目と \(i\) 列目を \(-1\) 倍する

行列のある行や列を \(-1\) 倍すると行列式も \(-1\) 倍されるので、上記の操作で行列式は不変です。任意の \(S\) に対して、 \(det(I_S)=det(A)\) です。

・和の条件

\(I_S\) の対角成分は常に \(A\) に等しいので、総和の対角成分は \(A\)\(M\) 倍です。

\(I_S\) の非対角成分、 つまり \(i \neq j\) なる \(i\)\(j\) 列目の成分について考察します。(\(1 \leq i , j \leq N\))

\(i \in S\) の場合、 \(i\)\(j\) 列目の成分は \(j\in S\) ならば \(A_{ij}\) , \(j\notin S\) ならば \(-A_{ij}\) になりますが、\(i\)を含む集合について、\(j\)を含む集合と\(j\)を含まない集合は同じ数あり、和を取ると打ち消し合います。

\(i\notin S\)の場合でも、同様の議論を行うことで、総和が\(0\)になることが示せます。

\(S\)として、\(1\)を含むもののみを考えて、出力しても、同様にACできます。 この場合、\(M=2^{N-1}\)で構築できます。

posted:
last update: