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問題が解けないと厳しいなぁ。