ログインしてください。
Official
B - Swap if Equal Length and Sum Editorial
by
B - Swap if Equal Length and Sum Editorial
by
vwxyz
数列の総和と転倒数は操作の前後で不変です。
\(A\) と \(B\) の総和と転倒数が等しいとき、必ず可能です。 具体的な構築方法によりこれを示します。
\(A\) に含まれる \(1\) の個数は \(\frac{N}{2}\) 以下としてよいです(そうでない場合は \(0\) と \(1\) を置き換えた数列に置き換えて考えます)。
\(A,B\) において左から \(i\) 番目の \(1\) がそれぞれ \(A_{a_i},B_{b_i}\) であるように \(a_i,b_i\) を定めます。
\(A \neq B\) である限り、以下の操作を繰り返します。
- \(a_i>b_i\) となる \(i\) のうち最も小さいものを \(l\)、\(a_i<b_i\) となる \(i\) のうち最も大きいものを \(r\) として、\(d=\min(a_l-b_l,b_r-a_r)\) と置く
- \(A\) の \(a_l-d\) 番目から \(a_l\) 番目と、\(a_r\) 番目から \(a_r+d\) 番目までを入れ替える
操作を \(1\) 回行うたびに、\(A_i=B_i=1\) となる \(i\) の個数は \(1\) 以上増えるので、この操作は高々 \(\lfloor\frac{N}{2}\rfloor\) 回で終了し、\(A\) は \(B\) に一致します。
posted:
last update:
