Official

E - Akari Editorial by QCFium


愚直に各光源について光の届く場所をシミュレートすると時間計算量 \(\Omega((H + W)N)\) で結構実行時間制限が厳しいと思います。
縦方向に伸びる光と横方向に伸びる光を分けて考え、一旦横方向の光だけ考えることにします。
愚直に各光源について光の届く場所をシミュレートしたときに以下のことが分かります。

  • ある光源からの ( 横方向の ) 光を処理するとき
    • すでにそこに光が届いているならその光源を追加しても光が届く範囲は変わらない
    • まだそこに光が届いていないなら、その光源から ( 横方向の ) 光が届くマスはまだ一つも光が届いていない

よって、「光源を順番に処理し、すでに光源の場所に光が届いているなら何もしない。届いていないなら愚直に障害物に当たるまでのマスを光を届いていることにする」というアルゴリズムは、愚直に処理する部分でまだ光が届いていないマスしか調べないことになります。 一回調べるとそのマスは光が届いていることになるので調べる回数は全体で \(O(HW)\) 回です。

縦方向でも全く同様のことができるので、最後に縦と横の少なくとも一方で光が届いているマスの数を集計すれば時間計算量 \(O(HW + N + M)\) で解くことができます。

posted:
last update: