Official

B - Pass on Path Editorial by riano_


\(2\) 人の旅人を A,B とします。

\(2\) 人が経路をそれぞれ両端を訪れて出発点に戻るまでの間、\(2\) 回のすれ違いが生じる必要があり、その瞬間、 \(1\) 回は A が右向き、もう一回は A が左向きで、両者が同じ休憩所にいることになります。A が左向きの時、両者がいる休憩所から左端までの距離を \(l\) とします。このとき、A から見て B までの間の距離は \(2l\) です。同様に、A が右向きの時の休憩所から右端までの距離を \(r\) とすると、このとき A から見た B までの距離は \(2r\) です。

これらが異なる場合、どちらかがこの差分を進む分の時間だけ待機する(または移動の速さを調整するなどする)必要があるため、その分だけ余分に時間がとられることになります。すなわち、 1 周にかかる時間は少なくとも

\(2L + 2|l-r|\)

必要です。そして、実際にこの時間で両者が一往復することが可能です。具体的には、初め片方のすれ違う休憩所から逆向きに出発させ、もう片方のすれ違う休憩所のみで待機して時間調整を行えばよいです(それ以外の時間は常に速さ \(1\) で移動します)。

以上から、\(r\)\(l\) の差が最小となるようにすれ違う休憩所を選べばよく、これは尺取りやソートを用いて十分高速に実現できます。

posted:
last update: