Official

K - マス目/Grid Editorial by admin


まず、\(k=1\) についてはスタートからBFS(幅優先探索)を行うことで \(O(N^2)\) で解くことが出来ます。

一般の \(k\) について考えます。
スタートがマス \((i_s,j_s)\) だとすると、\(i\equiv i_s \pmod k\) かつ \(j\equiv j_s \pmod k\) であるようなマス \((i,j)\) にしか辿り着くことは出来ません。それらのマスのみに注目してBFSを行えば \(O((\frac{N}{k})^2)\) で解くことが出来ます。
ただしそのためには「マス \((i,j)\) から上/下/左/右に \(k\) マス進むことができるか」を \(O(1)\) で求める必要があります。これは二次元累積和等を用いれば可能です。(事前に \(O(N^2)\) の計算量がかかります。)

全体の計算量は \(O(\sum_{k=1}^{N-1}\frac{N^2}{k^2})\) となります。これは、\(\sum_{k=1}^{\infty}\frac{1}{k^2}\)\(\frac{\pi^2}{6}\) に収束するため \(O(N^2)\) であることが分かります。

posted:
last update: