ABC109 参加記録
2週間ARCとの併催で配点が恐ろしい感じでしたが、久しぶりにまともな配点のABCになりました。
結果は16分台全完で18位。けっこう速かったですね。ARCでもDが400だったらこのくらいの速度で解きたいです。
A - ABC333
解法
と のどちらかが偶数だったら は必ず偶数になります。また、 と が両方とも奇数だったら とすることで積を奇数にできます。これを場合分けします。
ACコード
(Ruby)Submission #3151145 - AtCoder Beginner Contest 109
B - Shiritori
解法
重複した文字列があるかの確認をして、 番目の末尾と 番目の先頭が一致しているかを について判定すればよいです。
ACコード
(Ruby)Submission #3152443 - AtCoder Beginner Contest 109
C - Skip
解法
座標 からのスタートだと考えにくいので、まず 全てから を引いて、座標0からのスタートだとしてしまいましょう。
そうすると到達可能な点は、座標0からスタートして任意回の の移動で到達できる点、つまり の倍数です。つまり、(補正後の) 全てが の倍数であるという条件を満たすように、なるべく大きな を選べばよいです。これは の最大公約数になります。
ACコード
(Ruby)Submission #3153468 - AtCoder Beginner Contest 109
D - Make Them Even
解法
問題文だけ読むと分かりませんが、出力例を見ると構築問題であることが分かります。
全コインの合計が偶数だった場合は、全マスを偶数にするのが最適です。全コインの合計が奇数だった場合は、1マスを残してそれ以外を偶数にするのが最適です。このように作れないか考えます。
全マスを一筆書きできるような経路を考えます。そのような経路をずっと辿っていき、「マスのコイン数が奇数だったら次のマスに1個渡す」ということを繰り返していくと、全マスについての操作回数を1回以下にしつつ、最後に訪問するマス以外は全て偶数個コインにできるはずです。
場合によってはちょっと操作回数に無駄がありますが、操作回数は最小化しろと言われていないので、これで大丈夫です。一筆書きの経路は、例えば以下のようなものを作ると良いでしょう。
ACコード
(Ruby)Submission #3155067 - AtCoder Beginner Contest 109
さいごに
最近激しい回が続いていましたが、ちょっと和みましたね。