Official

A - +3 +5 +7 Editorial by maspy


ヒント → https://atcoder.jp/contests/arc158/editorial/5901


[1] 問題の変形

本問では,\(x_1,x_2,x_3\) の値そのものではなく,それらの差だけが重要です.したがって,好きなタイミングで次を行うことを許容しても,問題の答えは変わりません.

\(c\) を定数として,\(x_1, x_2, x_3\)\(c\) を加える.

特に,\((+3, +5, +7)\) 操作を行うたびに全体に \(c\) を加えるというようにしても,問題の答えは変わりません.

例えば \(c=-1\) とすれば,\((+3, +5, +7)\) 操作の代わりに \((+2,+4,+6)\) 操作の場合の問題を考えてもよいことが分かりますし,\(c=-3\) とすれば \((+0,+2,+4)\) 操作の場合の問題を考えてもよいことが分かります.

ここでは \(c=-5\) として \((-2, 0, +2)\) 操作の場合の問題を考えることとします.つまり,操作は次のようになります:

ひとつの数に \(-2\),ひとつの数に \(+2\) を加える.


[2] \(x_1=x_2=x_3\) とできるための必要条件

\((-2, 0, +2)\) 操作の場合,\(x_1+x_2+x_3\) は不変です.したがって,\(x_1=x_2=x_3\) が達成できるためには \(x_1+x_2+x_3\)\(3\) の倍数であることが必要です.

これが成り立つとし,\(a = \dfrac{x_1+x_2+x_3}{3}\) とすると,各 \(x_i\) から \(\pm 2\) 操作で \(a\) を作ることが必要なので,\(x_i\)\(a\) の偶奇が等しいことが必要です.

よって,次の必要条件が得られます:

\(a = \dfrac{x_1+x_2+x_3}{3}\) は整数で,\(a,x_1,x_2,x_3\) の偶奇は等しい.


[3] 条件の十分性,最小操作回数

[2] の必要条件を仮定し,\(d = |x_1-a| + |x_2-a| + |x_3-a|\) とします.次のことが確かめられます:

  • [A] \(1\) 回の操作で,\(d\) は高々 \(4\) しか変化しない.
  • [B] \(d\neq 0\) ならば,必ず \(d\)\(4\) 減少させることができる.

[A] は,\(x_i\)\(\pm 2\) のどちらかの変化をするとき \(|x_i - a|\)\(2\) より多く減ることはないことから分かります.

[B] は,\(d\neq 0\) のとき \(x_i < a\), \(x_j>a\) となる \(i, j\) が存在し,\(x_i\)\(+2\) 操作,\(x_j\)\(-2\) 操作を行うことを考えることで証明できます(\(x_i\)\(a\) の偶奇が等しいことから,\(x_i\neq a\) ならば \(|x_i-a|\geq 2\) であることに注意してください).

[2] の必要条件のもと,[B] より,\(\dfrac{d}{4}\) 回で目標を達成することが可能です.また [A] よりこれが最小回数であることが分かります.


以上を適切に実装すれば,本問題はテストケースごとに \(O(1)\) 時間で解くことができます.

posted:
last update: