ARC014 魂の還る場所

https://atcoder.jp/contests/arc014/tasks/arc014_3?lang=ja

f:id:kort0n:20200108000344p:plain

解法

各ボールの色の偶奇性に着目すると、各色円筒に入れられるボールの数が奇数であれば、その色のボールは最後に最低1個は円筒の中に残る。

則ち、答えの自明な下界として、#{色c|円筒に入れられる色がcのボールは奇数個}が考えられる。

以下この答えを達成可能であることを示す。

以下のように状態A, B, C, Dを定める

状態A:円筒が空

状態B:円筒に1個のボールが入っている

状態C:円筒に2個のボールが入っている

状態D:円筒に3個のボールが入っており、この3個は異なる色であり、更に次に入るボールと同じ色が端に存在するか、もうボールは入らない

実は、操作中、円筒がこの4種類の状態のみを取るように出来る。

状態Aのとき

次のボールを入れれば状態B

状態Bのとき

次のボールが円筒の中のボールと打ち消し合えば状態Aへ遷移する。そうでないならば状態Cへ遷移する。

状態Cのとき

次のボールが既に円筒に入っている2つのボールのいずれかと同じ色なら、それと打ち消し合うように入れれば状態Bに遷移する

そうでないならば、更にもう1つ先のボールを見つつ適切な方から入れれば、状態Dに出来る。

状態Dのとき

状態Dの定義から、適切な方からボールを入れれば状態Cに出来る

 

以上より、操作中常に円筒を状態A,B,C,Dのいずれかに保つことが出来る。

以下、このように操作を行った際の最終状態を考える。

 

#{色c|円筒に入れられる色がcのボールは奇数個} = 0のとき

偶奇性に着目すると最終状態はAかCだが、Cになる為には同じ色のボールが円筒内に2つ存在する必要がある為、不適。よって、最終状態はA。

 

#{色c|円筒に入れられる色がcのボールは奇数個}=1のとき

偶奇性に着目すると最終状態はBかDだが、Dになる為には同じ色のボールが円筒内に2つ存在する必要がある為、不適。よって、最終状態はB。

 

#{色c|円筒に入れられる色がcのボールは奇数個}=2のとき

偶奇性とボールの個数に着目すると、最終状態はCであると分かる。

 

#{色c|円筒に入れられる色がcのボールは奇数個}=3のとき

偶奇性とボールの個数に着目すると、最終状態はDであると分かる。

 

そして、これらは全て前述の下界と一致する。

 

実装例:https://atcoder.jp/contests/arc014/submissions/9337970