Official

C - Error Swap Editorial by PCTprobability


\(N = 2\) の時は何回操作を行っても \((A_1,A_2),(A_2-1,A_1+1)\) を行き来するだけなので、\(B\) がこのいずれかである場合のみ可能です。以降、\(N \ge 3\) とします。また、\(A,B\) の最大値を \(M\) とおきます。

操作で \(\sum A\) は変わらないため、\(\sum A \neq \sum B\) の場合は不可能です。また、\(\sum A = \sum B\) ならば必ず \(A = B\) とすることが出来ます。

\(2 \le x < y\) のとき、\((i,j) = (1,y),(1,x),(1,y)\) と操作を行うことで \(A_x\)\(A_y\) を swap できます。同様に、\(x < y \le N-1\) の時も swap できます。\((x,y) = (1,N)\) のときは、\((i,j) = (1,N),(1,2),(2,N),(1,2),(1,N)\) と操作を行うことで swap が可能です。

この swap 操作を用いることで、\(A_x < B_x,A_y > B_y\) である \(x,y\) に対して \(A_x\)\(1\) 増やし \(A_y\)\(1\) 減らす操作が実現可能です。\(x < y\) ならば、\((i,j) = (x,y)\) として操作をしてから、\(A_x\)\(A_y\) を swap すればよいです。\(x > y\) の時も同様に可能です。

よって、\(D_i = A_i - B_i\) としたとき \(S = \sum \max(D_i,0)\) 回上記を行うことで \(A = B\) とすることが出来ます。\(S \le \frac{NM}{2}\) かつ、\(S\)\(1\) 減らすのにかかる操作回数は swap 操作の \(3\) 回に加えて更に \(1\) 回行うので、\(4\) 回となります。

\((x,y) = (1,N),(N,1)\) の場合のみ swap 操作を \(5\) 回の操作で行うため \(S\)\(1\) 減らすのに \(6\) 回かかりますが、そのように \((x,y)\) 選ばれる回数は \(\frac{M}{2}\) 回以下なので、全体の操作回数は \(2NM + M\) 回以下となります。

計算量は上記を愚直に行っても \(\mathrm{O}(N^2 M)\) であり、十分高速です。

おまけ:操作回数 \(3500\) 回以下で解いてください。

posted:
last update: