人工知能と競プロやってくブログ

深層学習・機械学習・AI・atcoder・競技プログラミングについて調べてやってみたことをまとめるブログです

AtCoder Beginner Contest 174 [ D - Alter Altar ]をPythonで解く(400点、🟫茶diff)

問題

atcoder.jp

赤と白の石がランダムにある。
・石を2個えらんで入れ替える
・石を1個えらんで、色を塗り替える
この操作を行なって、赤い石の左隣に白い石がない状態を作る。
最小で何回の操作が必要でしょうか?

解法

まず最終形を想定してみる。
石を1個塗りつぶす操作もあるから、赤が何個になるかわからない。

f:id:uchidamax:20210710021746p:plain
ABC174D

とりあえず最終形を想定して、操作回数を考えてみる。

f:id:uchidamax:20210710021906p:plain
ABC174D2

最終形が赤が左に2個とすると、元の状態と比較すると操作が必要な部分がわかる。 赤から白が3箇所。
白から赤が1箇所。
操作としては、白と赤をスワップ1回。
すると白から赤になる場所が0なので、赤から白にする残り2箇所は塗り潰し。
よって操作は3回。

赤から白にする箇所と、白から赤にする箇所の数の大きい方が操作回数になる。

最終形は石がN個としてN個ある(赤が左からX個つまるパターンがN個)。
これのどれが正解かわからないので、総当たりでみていく。

操作回数が最も少ない最終形が正解。

公式放送のsnukeさんの説明をもとに。
キレイに解けるもんだなー。
説明されれば、わかるけどなー。

実装

参考

youtu.be