Strorkisのブログ

信憑性については悪しからず

ABC136 D - Gathering Children

問題

D - Gathering Children

解法

 10^{100}回の移動後は必ずRLとなっている箇所に集まるので(それ以外では明らかにループしない)、その箇所に集まる人数を求めれば良い。

あるRLとなっている箇所における左側のRの個数を rとすると、 10^{100}は偶数であることから、 \lceil \frac{r}{2} \rceil人が左に集まり、 \lfloor \frac{r}{2} \rfloor人が右に集まる。
このことは、一番Lに近いRの位置に居た人が偶数回動くと元の位置に戻ってくることを考えるとわかりやすい。
右側のLの個数 lについても同じようなことが言えるが、集まる位置が左右逆になるので注意が必要である。

 r lの求め方としては、 iがRの左端とすると、 i+r-1がRの右端、 i+rがLの左端、 i+r+l-1がLの左端となることを考えると、実装が楽になる。

コード

Submission #12485674 - AtCoder Beginner Contest 136

感想

綺麗に実装出来たので気持ちよかった。