Official

G - Go Territory Editorial by kyopro_friends


以下では、座標平面の格子点の代わりにグリッドで考えます。\((-1,-1)\) にたどり着くことができるマスを “外”、できないマスを “中” と表現します。

まず、石が 8 方位に見て連結である場合を考えます。
予め石の周囲 8 マスを列挙しておくことで、それらのマスが”中”か”外”かは、BFS などにより容易に判定できます。(列挙したマスのうち、最も左下にあるマスは必ず “外” であり、このマスを始点に 4 方位を見て BFS することで”外”のマス全てに到達できます)

例:黒いマスが石がある格子点を表す

その後、各行ごとに見て、「外石中……中石外」となっている箇所があれば、その間を”中”とカウントすることで、各行に含まれる”中”の点の個数を求めることができます。石が連続するケースや、”中”の途中に石があるケースに注意してください。(上図の3行目など)

非連結なときを考えます。連結成分ごとに考えてよいように思えますが、入れ子になっているときに注意が必要です。
連結成分ごとにBFSして”中”か”外”かを判定したあと、全体で行を見たとき、入れ子になっている箇所があると「外石中……外石中……中石外……中石外」のように、”中”の箇所が”外”となってしまうことがあります。

下図中央の行などがその例

「外、石が1個以上、中」が来るたびに入れ子が+1、「中、石が1個以上、外」が来るたびに入れ子が-1されることに気をつけて、いま何重入れ子になっているかを管理すると対処することができます。

また、異なる連結成分が十分近くにある場合、あるマスが”外”か”中”かの情報を互いに上書きしてしまうことがあります。石が連結である条件を、8 方位に隣接していることから、チェビシェフ距離が \(2\) 以下であることに緩めるとこれを回避することができます。

posted:
last update: