AGC023-D:Go Home
こういう問題を解いていると競プロ楽しいなと思う(やはりパズルが好きなのでは?)。
問題
解法
すべてのマンションが地点から見て同じ方向にあるときは自明なので、そうでない場合を考える。
初期状態から考えるとつらい気持ちになるので、終了状態から近い方から考えてみる。から見て最も座標の小さい側にあるマンションの住人と、最も大きい側にあるマンションの住人だけが残った状態のバスは、今までのバスの軌跡によらずとの大小だけでバスの動きが決まる。仮にだとすると、マンションの住人はマンションの住人がバスを降りるまで、つまり一番最後までバス取り残されることになる(かわいそう)。そうなると、マンションの住人の目標は、マンションの住人にできるだけ早くバスを降りてもらうになるので、彼らの目標はマンションの住人と同じだと考えてよい。するとマンションのことはもう考えなくてよいから、マンションからまでだと思って同様に考えればよい。このことを最初に述べた自明な形になるまで繰り返すことで、逆順でバスがどのように動くかを決めることができるので、この問題が解ける。時間計算量はになる。
実装
Submission #6134992 - AtCoder Grand Contest 023
実装が一番難しかった。実装で明示的にバスの動きを追わなくてもできそうだけど、そうしてしまった方が実装が楽だった。