H - Moat 解説 by Mitsubachi

条件の判定方法

この問題では内側にあるとした領域に対応するお堀が存在するか判定する必要があります。問題文の条件 $3$ から $5$ は簡単に満たすことができるようにでき、条件 $2$ は簡単に判定できます。条件 $1$ ですが、これは以下のような点 $(i,j)$ が存在しないことが必要十分条件です。

  • $(i,j)$ を含む $1 \times 1$ の正方形は $4$ つあるが、そのうち $2$ つのみお堀の内側であり、かつそれらが辺を共有していない(斜めである)
  • また、お堀は多角形なので「連結」であることと「穴がない」ことが必要十分です。このうち連結であることはBFSなどを用いて簡単に判定できます。
    穴がないことについて、多角形に穴がある場合、多角形の外側にある領域は連結でなくなるので $6 \times 6$ の内部 $4 \times 4$ のエリアに領域があるとし先ほどと同様に外側についても連結であるかを調べることで判定可能です。
    また、この問題において、お堀の頂点は格子点上なので、ピックの定理が満たされるかを用いても判定することができます。ピックの定理は以下の通りです。

  • 穴がないかつ頂点が全て格子点上にある多角形の内部、辺上にある格子点の数をそれぞれ $a,b$ とし、面積を $S$ とした際、 $S = a+ \frac{1}{2}b -1$ が成り立つ。
  • 例えば、

    ####
    #..#
    #..#
    ####
    

    なら、 \(a=0,b=14,S=12\) となりピックの定理が成り立ちません。事実、これに穴が開いています。(#を \(1 \times 1\) のマスとしてみなしています)

    また、

    ##.#
    ####
    ..##
    ..##
    

    なら、 \(a=3,b=18,S=11\) となりピックの定理が成り立ちます。事実、これに穴はありません。

    投稿日時:
    最終更新: