Toy と帽子と ADP BE

主にプログラミングに関わる話をゆるくエモくやっていきます

AtCoder Beginner Contest 293

4完

各問題

A - Swap Odd and Even

与えられる文字列の長さは偶数であることが保証されているので

// n は文字列の長さ
for (int i = 0; i < n; i += 2) swap(s[i], s[i + 1]);

とするのが早い(速い)かなぁ?

B - Call the ID Number

呼ばれたかどうかのフラグを vector<bool> で持っておいて、最後にまとめればいいと思います。

C - Make Takahashi Happy

移動回数は H + W - 2 回です。たかだか 18 回なのでビット全探索で全探索可能です。ビットが立っているとき右、立ってないとき下に移動するとしてチェックしていけばよいでしょう。マス目をはみ出たらだめなのでそこだけ注意です。

D - Tying Rope

いかにも Union-Find が使えそうなのでそうします。

青を1からN、赤をN+1から2Nまでとして、まず1とN+1、2とN+2、 ...、とつなぎます。あとは操作ごとにひとつながりになるかどうかをチェックしてからつないでいけばよいです。

最終的に「環状になっている数」 「連結成分数 - 環状になっている数」が答えになります。

E - Geometric Progression

実験すると、あまりの数がループすることはわかるのですが、愚直にやろうとしてもループが長すぎるときどうしようもないよなぁとか考えているうちに終わってしまいました。

ちょっと自分には無理げな数学問だった模様...。

まとめ

なんとか水復帰ですが、こういうE問題が解けないと厳しいなぁ。