Official

F - K-Medians Clustering Editorial by sumitacchan


\(c_1, \dots , c_K\) は必ず \(1\) つずつは \(S\) に含まれる必要があるため、それ以外の \(N' := N - K\) 要素を考えます。次の操作で \(N'\) 要素を全て消せることが、条件を満たす \((S_1, \dots, S_K)\) が存在することの必要十分条件です。

  1. ある \(k\ (1 \le k \le K)\) に対して \(x \le c_k \le y\) となる \(2\) 要素 \(x, y\) を消す。
    \(x, y\)\(S_k\) に加えることに対応)
  2. ある \(k\ (1 \le k \le K)\) に対して \(c_k \le x\) となる要素 \(x\) を消す。この操作は各 \(k\) に対して一度までしか行えない。
    \(x\)\(S_k\) に加えて要素数を偶数にすることに対応)

以下 \(c\) は昇順であるとし、また \(c_0 := 0, c_{K+1} := M + 1\) とします。

開区間 \((c_k, c_{k+1})\) に含まれる要素数 \(T_k\)\(T_k - k > N' - T_k\) を満たしているとすると、2. の操作を最大まで行っても 1. の操作でこれらの要素を消しきることはできません。 逆に、そのような \(k \ (0 \le k \le K)\) が存在しないなら \(N'\) 要素を全て消すことが可能です。

同時に複数の \(k\)\(T_k - k > N' - T_k\) となることはないので独立に余事象を数え上げることができます。これは、格子上で \((0,0)\) から \((N'-1, M)\) に至る最短経路のうち \((x_0, y_0) := (c_{k+1} - c_{k} - 2, \lfloor (N' + k) / 2 \rfloor + 1 )\) の上側( \((x_0,y_0)\) も含む )を通るようなものの数に等しいです。\((x_0, y_0)\) の上側を通ることと左側を通ることは同値であるため、この解釈のもと \(c_{k+1} - c_k - 1\) 個の項の和として表せます。全体としては \(O(M)\) 項になります。

以上より \(O(N + M + K \log K)\) でこの問題に答えることができます。

posted:
last update: