Official

D - Grid Path Tree Editorial by potato167


\(N = 1, M = 1, k = 1\) のいずれかを満たす場合の答えは簡単に求められるので省略します。以降、\(N \neq 1\) かつ \(M\neq 1\) かつ \(k\neq 1\) であると仮定します。

計算量が悪い解法

まず、\(k\) を固定したときに時間計算量 \(O(N + M)\) で答えを求める方法を説明します。

\(N\) マス横 \(M\) のマス目を左上から右下へ、右移動もしくは下移動を繰り返して移動する方法と、木は一対一対応します。

ここで、木に \(\left(a_{2}, b_{2}\right) = \left(2, N + 1\right)\) であるという条件を追加します。するとそのような木は次の条件を満たす正整数列 \(A = \left(A_{1}, \dots , A_{|A|}\right)\) と一対一対応します。

\(N - 1 = A_{1} + A_{3} + \cdots \)

\(M - 1 = A_{2} + A_{4} + \cdots\)

これは、下移動を \(A_{1}\) 回、右移動を \(A_{2}\) 回、下移動を \(A_{3}\) 回、\(\dots\) と繰り返す移動と対応します。

整数列 \(A\) で表されるような木に対する \(\mathrm{dist}(i, j) = k\) であるような \(\left(i, j\right)\) の組の数は \(k\neq 2\) であれば以下のように表せます。

\[\sum_{t = 1, \dots} A_{t}A_{t + k - 2}\]

\(k\) が奇数であるとき \(|A| = L\) であるような全ての \(A\) に対する、以上の値の総和は以下のように表せます。

\[\max\left(0, L + 2 - k\right)\binom{N - 1}{\left\lfloor\frac{L + 1}{2}\right\rfloor}\binom{M - 1}{\left\lfloor\frac{L}{2}\right\rfloor}\]

\(k\) が偶数のときも、以下のような式で表せます。

\[\max\left(0, \left\lfloor\frac{L + 1}{2}\right\rfloor + 1 - k\right)\binom{N}{\left\lfloor\frac{L + 1}{2}\right\rfloor + 1}\binom{M - 2}{\left\lfloor\frac{L}{2}\right\rfloor - 1} + \max\left(0, \left\lfloor\frac{L}{2}\right\rfloor + 1 - k\right)\binom{N - 2}{\left\lfloor\frac{L + 1}{2}\right\rfloor - 1}\binom{M}{\left\lfloor\frac{L}{2}\right\rfloor + 1}\]

また、これは \(k = 2\) のときも同じ式で表せます。

よって、\(k, |A|\) を固定したときの答えが \(O(1)\) で求められるので、\(k\) を固定したときの答えも時間計算量 \(O(N + M)\) で解けます。

\(\left(a_{2}, b_{2}\right) = \left(1, N + 2\right)\) であるときも、\(N, M\) を入れ替えれば同様に解くことができます。

満点解法

任意の \(2\leq k\leq N + M - 5\) について、\(\left(ans_{k + 4} - 2\cdot ans_{k + 2} + ans_{k}\right)\) は二項係数の事前計算のもとで \(O(1)\) で求められます。

よって \(ans_{2}, ans_{3}, ans_{4}, ans_{5}\) を前述の方法で愚直に計算した後、その他の値を上記の事実を用いて適切に求めることで、任意の \(k\) に対する \(ans_{k}\) の値は時間計算量 \(O(N + M)\) で求められることができ、この問題を解く上で十分高速です。

posted:
last update: