mini notes

競技プログラミングの解法メモを残していきます。

yukicoder No.1021 Children in Classrooms (★2)

問題:No.1021 Children in Classrooms - yukicoder

解答①:#463089 (C++14) No.1021 Children in Classrooms - yukicoder 解答②:#463090 (C++14) No.1021 Children in Classrooms - yukicoder

解法①:i=0とi=n-1が吸収壁になっている。

lp:もともとi=0である生徒の現在位置、rp:もともとi=n-1である生徒の現在位置、ls:左で吸収されたindexの集合、rs:右で吸収されたindexの集合とし、これらの情報から各生徒の最終位置を算出する。

ls.size() == n またはrs.size() == nであるとき、全ての生徒は同じ教室に集まっている。その教室の位置はlp(=rp)である。

そうでないとき、lp < rpとなっており、lpとrpの間の教室は最初の生徒のままである。これをうまく出力する。

解法②:tester解。

aをdequeとして管理。Lの命令は「dequeの先頭2項を取り出して足し合わせたものを先頭に追加、末尾に0を追加」、Rの命令は「dequeの末尾2項を取り出して足し合わせたものを末尾に追加、先頭に0を追加」。