ABC197

BとEの早解きが苦手。

A - Rotate

std::rotateするだけと思ったけど3文字だからベタ書きのが早かったかなあ。rotateの書き方も思い出すのに時間かかった。

B - Visibility

なぜか斜めは見えない。内側から数えるんだけどfor文4つはきついって。

C - ORXOR

ちょっと考え込んでしまった。Cでよくあるただの全探索なんだけど、その対象が数というモノではなく仕切りという概念なので、ただそれだけで自分にとっては難しくなってしまう。実装もややもたつく。N個目の仕切りを数列の末尾に追加して考えると見通しがいい。面白かった。

D - Opposite

偶数なのはちょうど反対が存在するようにね。趣旨がわかれば簡単だけど、実装はなぜか時間かかる。出題頻度が低いからライブラリが整備されてないというのもあるのかな。反時計回りは2通り試した。

(解説を読んで)「”方位”を求める」と書いてあって、それは思いつかねえよ(この問題なら思いつく必要もなさそう)。確かに反時計回りもそれならわかりやすいけど。

E - Traveler

同じ色について端から端まで移動する必要があるので重要なのは各色の座標の最小値と最大値。解けそうになって、「やりたくねえ」と叫んでFに行ったが、わりとすぐ戻ってきて頑張って実装。後ろからやった。サンプルが合わず悩んだが、再び座標0に戻る必要があることを見落としていた。修正してAC。いま気づいたけど0から出発して0に戻るから対称だし、対称でなかったとしても後ろからやる必要ない。前からできる。

F - Construct a Palindrome

全然わからなかった。回文のことを何も知らない。真ん中を決め打ちしてとか、両端からBFSみたいにとか。ただ作れる文字列は組合せ爆発するので、DPみたいにして同一視できるものを同一視したい。わからなかった。