ARC218B - Balls of Three Colors

考え方

入力例1の3番目をもとに考察するとよい(具体例大事!).

$R \leq B$とする(例は既にそうなっている).

以下の手順で全てGに変えることができる.

R G B
1 2 4
3 1 3
2 3 2
1 5 1
0 7 0

つまり,すべてGにしたければ,RとBを同じ個数に調整できればよいことがわかる.この調整は,(B - R) % 3 == 0を満たすときに限り実現できる(G, BをRに変えると,G, Bは1減り,Rは2増えるため).また,調整に必要な操作回数は(B - R) // 3回である.


よって,(B - R) % 3 == 0のとき

  1. (B - R) // 3回,G, BをRに変える(Rは2 * (B - R) // 3増える)
  2. R + 2 * (B - R) // 3回,R, BをGに変える
とすれば良い.


あとは,R, G, Bの役割を変えて${}_{3}\mathrm{C}_{2}=3$通り試して一番小さいものを出力すれば良い.

【回答例】

T = int(input())

for _ in range(T):
  R, G, B = sorted(map(int, input().split()))
  tmp = []
  for x, y, z in ([(R, G, B), (R, B, G), (G, R, B)]):
    if (z - x) % 3 == 0:
      tmp.append(x + 3 * (z - x) // 3)
  if tmp:
    print(min(tmp))
  else:
    print(-1)