AtCoder Regular Contest 158 備忘録
コンテストページ: AtCoder Regular Contest 158 - AtCoder
コンテスト中AC: A
A - +3 +5 +7
3つの値を同じにする問題は割と良く見る気がします。そして、この系統の問題は、差をどのように詰めるのか、という視点で見ると解ける場合が多いです。
今回、及びをそれぞれとおきます。目標は、にすることです。
操作によってがどのように変化するか考えます。例えば、(+3, +5, +7)の操作の場合、はそれぞれ+2, +2されます。
操作として考え得る6通りについて、がどのように変化するか、その変化量を書き出します。
(+2, +2), (+4, -2), (-2, +4), (+2, -4), (-4, +2), (-2, -2)
ここからわかることとして、は偶数しか変化しません。
そこで、いずれかが奇数である場合、0にするのは不可能です。
以下、が偶数である場合を考えます。
わかりやすくするため、及び操作による変化量を全て2で割っておきます。
変化量は、
(+1, +1), (+2, -1), (-1, +2), (+1, -2), (-2, +1), (-1, -1)
です。
が異なる場合、(+2, -1), (-1, +2), (+1, -2), (-2, +1)のいずれかでにした後、(+1, +1), (-1, -1)のいずれかで0にすることになります。
そこで、次はとの差を考えます。とおきます。
(+2, -1), (-1, +2), (+1, -2), (-2, +1)では、は3の倍数ずつしか変化しません。そこで、が3の倍数でない場合、0にすることは不可能です。
以下、3の倍数であるとします。
このままだと変化量が多く、ややこしいので、適切に値を入れ替えて、が非負整数かつ、となるようにします。
[補足]
値を入れ替えてもよい理由を説明します。
例えばにそれぞれ(+3, +5, +7)するという操作を考えます。
値をと入れ替えた場合に、操作についても入れ替えて(+5, +3, +7)にすると、先程の操作を再現できます。
値を入れ替えることで不可能となるような操作が無いことから、値を入れ替えても問題ない、と言えると思います。
こうしておくことで、選ぶべき変化量は(+1, -2), (-1, -1)に限定されます。
になっていることから、最小の操作回数は以下のようになります。
- (+1, -2)を回して、すなわちにする。
- (-1,-1)を回して、すなわちにする。