Official

M - Mahjong 2 Editorial 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)\) で解けます。

posted:
last update: