mini notes

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

CODE FESTIVAL 2015 予選A D - 壊れた電車

問題:D - 壊れた電車

解答:Submission #14146276 - CODE FESTIVAL 2015 予選A

解法:
時間kを決め打ちし、その時間で電車の点検が完了できるかの二分探索を行う。
二分探索の各試行では左の整備士から整備範囲を貪欲に決めることができる。
実装としては、変数lとして整備されていない最も左の号車を持っておき、このlを更新してゆく。

i番目の整備士がいる号車をv[i]とする。
l>v[i]の時は整備士は出来るだけ右の号車に移動しつつ整備すればよい。
l≦v[i]のときは「先に自分の左側の号車を整備した後できるだけ右に向かう」やり方と、
「左の号車を整備する余裕をもちつつ、先に右の号車を整備した後左に向かう」やり方があることに注意。
自分より左の号車で折り返すか、自分より右の号車で折り返すかで、整備の範囲が変わることになるためである。