mini notes

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

ABC186 F - Rook on Grid

問題:F - Rook on Grid

解答:Submission #19457973 - Panasonic Programming Contest (AtCoder Beginner Contest 186)

解法:右→下と動く場合と下→右と動く場合に分けて考える。

①右→下と動く場合:各列ごとに最初に当たる障害物の行座標を覚えておき、その障害物までのマスを1列目の障害物に当たるまで足してゆけばよい。

②下→右と動く場合:同様に各行ごとに最初に当たる障害物の列座標を覚えておき、その障害物までのマスを1行目の障害物に当たるまで足してゆけばよい。ただし、①で既に足したマスが足される可能性があるのに注意。既に足されたマスを除くためには、segtreeなどで各列ごとに「まだ障害物に当たっていなければ1、そうでなければ0」という情報を保持し、各行ごとに1列目から障害物に当たるまでのsegtree上の1の数を合計して全体の答えから引けばよい。