公式

E - Middle Point 解説 by evima


点に対する加算とスカラー倍を自然な方法で定義します。例えば、\(A\)\(B\) の中点は \(\frac{1}{2} A + \frac{1}{2} B\) です。

入力された点を \(P_1, \cdots, P_n\) とし、\(Q\) を打てるか判定しましょう。以下を容易に証明できます。

  • \(Q\) を打てる必要十分条件は、以下の条件を満たす係数 \(w_1, \ldots, w_n\) が存在することである。
    • \(w_i\) は非負である。
    • \(w_i\) は有理数であり、分母は \(2\) の累乗である。
    • \(\sum w_i = 1\)
    • \(Q = w_1 P_1 + \cdots + w_n P_n\)

これらの条件は、実は以下と同値であることがわかります。

  • \(Q\) が入力点の凸包の外部(境界除く)にある場合、\(Q\) は打てない。
  • \(Q\) が入力点の凸包の境界上にある場合、\(Q\) が辺 \(AB\) 上にあるとすると、係数 \(w_i\) は点 \(A, B\) に対応するものを除いて全て \(0\) でなければならない。
  • \(Q\) が入力点の凸包の内部(境界除く)にある場合、係数に対する「非負」という条件は無視できる。

この全ての詳細な証明は長くなるため、(最も興味深く難しい部分である)三つ目の部分に対する証明の概略のみを記します。

一般性を失うことなく \(Q\) は原点であると仮定できます。この場合、以下が問題です。

  • \(c_i\) を、\(\sum c_i P_i = 0\) を満たす 非負整数 係数とする。\(\sum c_i\)\(2\) の累乗となりうるか。

これを以下のように変えても真偽は変わらないことを示します。

  • \(d_i\) を、\(\sum d_i P_i = 0\) を満たす 整数 係数とする。\(\sum d_i\)\(2\) の累乗となりうるか。

後者を満たす \(d_i\) があるとき、前者を満たす \(c_i\) の存在を示せれば十分です。まず、\(\sum e_i P_i = 0\) を満たす何らかの 正整数 係数 \(e_i\) をとります。そして、\(s \sum d_i + t \sum e_i\)\(2\) の累乗であって \(t/s\) が十分大きいような正整数 \(s, t\) をとると、\(c_i := s d_i + t e_i\) が条件を満たします。

これで、主に考えるべきことは以下のようになりました。

  • \(Q\)\(Q = w_1 P_1 + \cdots + w_n P_n\) と書けるのはどのようなときか。ここで、\(w_i\) は以下の条件を満たす係数である。
    • \(\sum w_i = 1\)
    • \(w_i\) は有理数であり、分母は \(2\) の累乗である。

まず、\(w_i\)\(\sum w_i = 1\) を満たす 整数 係数であるとして、\(w_1 P_1 + \cdots + w_n P_n\) と書ける点全てからなる集合を考えましょう。この集合は、実は非常に単純な構造を持ちます。\(P_i\) のうちいずれかが原点であるとすると、この集合は何らかの点 \(A, B\) に対して以下の形式で書けます。

\(\{ nA + mB | n, m \in \mathbb{Z} \}\)

この点 \(A, B\) は、互除法に似たアルゴリズムで具体的に求められます。

ここで、これらの点が格子点となるような斜交座標系を考えましょう。\(Q\) を打てるのは、この座標系における \(Q\) の座標がともに分母が \(2\) の累乗であるような有理数であるときです。凸領域内のそのような点の個数は、ピックの定理を用いて求められます。

投稿日時:
最終更新: