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