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: