M - Mahjong 2 解説
by
TKO
まず、 \(K\) を固定したときの判定を考えましょう。
\((x,x,x)\) を取り除くことを操作 \(1\) 、\((x-1,x,x+1)\) を取り除くことを操作 \(2\) と呼びます。両者の操作は可換なので操作 \(2\) を行ってから操作 \(1\) を行うとして良いです。また、同じ \(x\) で操作 \(2\) を \(3\) 回行うことは各 \(x-1,x,x+1\) で操作 \(1\) を \(1\) 度ずつ行うことと等価なので、同じ \(x\) で操作 \(2\) は高々 \(2\) 回までとして良いです。
\(A_1 \bmod 3\) は操作 \(1\) で不変なので操作 \(2\) で \(0\) にする必要があります。つまり \(x=2\) で操作 \(2\) を \(A_1 \bmod 3\) 回行うことになります。この手続きを \(A_2,\ldots,A_{N-2}\) にも行い、全ての \(A_i\) が非負かつ \(3\) の倍数ならば条件を満たしています。
これで \(K\) が固定されたときの場合は解けました。次に \(K\) を動かしたときの判定を高速にします。
左から見て上の手続きを行ったとき \(x=i\) の操作 \(2\) の回数を \(L_i\) 、右から見たときの操作回数を \(R_i\) と置きます(ただし、途中で不適となった場合は \(-1\) )。ここで重要なのは、カード \(K\) 追加後の判定について \(L_2,\ldots,L_{K-2},R_{K+2},\ldots,R_{N-1}\) に対応する操作を行った後の状態で考えても良いということです。よって、適切な前計算を行った後に、各 \(K\) で注目するべき枚数の組は \(\{B_{K-2},B_{K-1},A_K+1,B_{K+1},B_{K+2}\}\) の形に限られるので、 \(O(1)\) で判定することができます。
以上より、この問題を \(O(N)\) で解けます。
投稿日時:
最終更新: