A 問題「ブロックの移動(Blocks)」解説

満点解法

$A$ の要素の総和は ${N*(N+1)}/2=1+2+...+N$ である.

したがって,

というシミュレーションを貪欲に繰り返すことで必ず最適に並び替えることができる.

ただし,シミュレーションを実装するよりも簡潔に答えを求める方法が存在する.

考えてみると,

が分かる.

よって,最適な移動回数は ${{1}\over{2}}\sum_{i=1}^{N} {|A_i-i|}$ に等しい.