解法
できる操作が、
1
をひとつ左に動かす連続する
1
を消す
のどちらかとなっています。
また、右側にある 1
が、一つ左側の 1
を追い越すことはできません(そもそも、追い越したいのであれば、左側の 1
を動かせばよいです)。
そのため、元々で与えられた
1
の順序は変化しないまま、左に移動するか、消えるか、その位置のままか、のパターンしかありえないことがわかります。
が
1
のときに左に移動させる(もしくは据え置き)パターンは、それより左側に、まだ位置を確定させていない 1
が存在しないが、が
1
となっているものが存在するパターンです。が最小となっている箇所に優先的に移動させないといけないため、
回の操作が必要になります。
が
1
のときに消すパターンは、上記のようなが存在しないときです。どこへ移動させても
と一致することがないので、
が
1
となっている最小のを見つけ、その
1
と合わせて打ち消します。これにはコストがかかります。
以上のことをシミュレートし、最終的にと
が一致すればよいです。
queueを2つ使い、と
でまだ消すべきなのに消してない/
1
にすべきなのにが
1
になっていない位置をメモし、消すべき1
から優先的に上記の処理を行います。