Official

J - 除夜の鐘/Joya no Kane Editorial by leaf1415


正整数 \(d'\) が問題文中の \(d\) としてあり得る必要十分条件は、

  • \(d' \vert \gcd(A_2-A_1, A_3-A_2, \ldots, A_K-A_{K-1})\) かつ
  • \((N-1)d' \geq A_K - A_1 \)

が成り立つことです(証明は後述)。

よって、まず \(g \coloneqq \gcd(A_2-A_1, A_3-A_2, \ldots, A_K-A_{K-1})\) をユークリッドの互除法によって、\(O(K \log A_K)\) 時間で求め、 \(g\) の全ての正の約数 \(d'\)\(O(\sqrt{g})\) 時間で列挙し、それらのうち \(A_K - A_1 \leq (N-1)d'\) を満たすものだけを出力することで、本問題を \(O(K \log A_K + \sqrt{A_K})\) 時間で解くことができます。

以下、上に述べた必要十分条件を証明します。

・必要性

\(d, t\) を問題文中の整数とすると、時刻 \(A_1, A_2, \ldots, A_K\) には鐘がなっていることから、 ある \(K\) 個の整数 \(0 \leq l_1 \lt l_2 \lt \cdots \lt l_K \leq N-1\) が存在して、各 \(i = 1, 2, \ldots, K\) について \(A_i = t + l_i d\) が成り立ちます。

\(A_{i+1} - A_i = (t + l_{i+1}d) - (t + l_id) = (l_{i+1} - l_i) d\) より、 \(d \vert (A_{i+1} - A_i)\) ですが、 これが全ての \(i = 1, 2, \ldots, K-1\) で成り立つので、 \(d \vert \gcd(A_2-A_1, A_3-A_2, \ldots, A_K-A_{K-1})\) が必要です。

また、\(A_K - A_1 = (l_K - l_1)d\) ですが、 \(0 \leq l_1 \lt l_K \leq N-1\) より \( l_K - l_1 \leq N-1\) がなりたつので、\(A_K - A_1 \leq (N-1)d\) も必要です。

・十分性

与えられた \(d'\)\(d' \vert \gcd(A_2-A_1, A_3-A_2, \ldots, A_K-A_{K-1})\) かつ \(A_K - A_1 \leq (N-1)d'\) を満たすと仮定します。 このとき、鐘が鳴った \(N\) 個の時刻の列として \((A_1, A_1 + d', A_1 + 2d', \ldots, A_1 + (N-1)d')\) があり得ます。

実際、各 \(i = 1, 2, \ldots, K\) について、高橋君が(高橋君にとって)\(i\) 回目に鐘を聞いた時刻 \(A_i\) は、\(l_i \coloneqq (A_i-A_1)/d'\) によって\(A_i = l_i d' + A_1\) と表すことができ、 下記で確認する通り \(l_i\)\(0\) 以上 \(N-1\) 以下の整数であることから、時刻 \(A_i\) にはたしかに( \((l_i+1)\) 回目の)鐘がなっていることがわかります。

  • \(A_i - A_1 = (A_i - A_{i-1}) + (A_{i-1} - A_{i-2}) + \cdots + (A_2 - A_1)\) と、 仮定 \(d' \vert \gcd(A_2-A_1, A_3-A_2, \ldots, A_K-A_{K-1})\) から \(l_i = (A_i-A_1)/d'\) は整数であり、
  • 仮定 から \(0 \leq A_i - A_1 \leq A_K - A_1 \leq (N-1)d'\) なので、\(l_i = (A_i-A_1)/d'\)\(0\) 以上 \(N-1\) 以下です。

posted:
last update: