Official

A - Arithmetic Sequence Editorial by maspy


◆ 次元削減

数列 \(A\) が等差数列であることは、\(2A_2 - A_1 - A_3 = 0\) と同値です。したがって、\(A_i\) の値そのものは重要ではなく、\(2A_2 - A_1 - A_3\) の値のみが重要です。

そこで、\(X = 2A_2 - A_1 - A_3\) とおくことにします。操作結果の \(X\) の値も \(A_i\) の値は使わずに計算できるため、問題を解くにあたって \(A_i\) の値は完全に無視してしまって構いません。結局、次の問題を解けばよいことが分かります。

整数 \(X\) が与えられる。 次の \(2\) 種の操作が行える:

  • \(X\)\(-1\) を加える(\(i = 1, 3\) とした場合)
  • \(X\)\(2\) を加える (\(i = 2\) とした場合)

\(X = 0\) が成り立つようにするための最小の操作回数を求めよ。

数列の状態として考慮すべき変数の数(次元)が \(A_1, A_2, A_3\)\(3\) つから、\(X\)\(1\) つになって、状況が簡潔になりました。


◆ 答の計算

\(X\)\(2\) を加える回数を \(k\) とすると、\(k\geqq 0\) および \(X + 2k\geqq 0\) が必要です。この条件は、 \(k_0 = \max(0, \lceil (-X)/2\rceil)\) として、\(k\geqq k_0\) と表すことができます。

\(2\) を加える回数 \(k\geqq k_0\) を固定すると、\(-1\) を加える回数は \(X + 2k\) となり、全体の操作回数は \(X + 3k\) です。これを最小化するためには \(k\) を最小化すればよく、答は \(X + 3k_0\) であることが分かります。時間計算量は \(\Theta(1)\) 時間です。


◆ 解答例

posted:
last update: