錬金術を行う順序は,以下の 通りしか有り得ないことが分かります.
これら 通りの順序で行った時の錬金術の最大回数を求めれば良いです.
xxxxxxxxxx
A,B,C = map(int,input().split())
ans = 0
if (A+B)%2==0:
X = (A+B)//2
ans = max(ans, 1 if (X+C)%2 else 2)
if (B+C)%2==0:
X = (B+C)//2
ans = max(ans, 1 if (X+A)%2 else 2)
if (C+A)%2==0:
X = (C+A)//2
ans = max(ans, 1 if (X+B)%2 else 2)
print(ans)
なお,偶奇に着目して問題を解くこともできます.
がすべて偶数または奇数の時, 回目は で割った余りが等しい数に対して錬金術を行うことで, 回目の錬金術を行うことができます.
鳩の巣原理より のうち少なくとも つは で割った余りが等しいので,答えは必ず になります.
の中に偶数と奇数がともに存在する時, 回目は偶奇が等しい数に対してのみ錬金術を行うことができるので,対象となる数は一意に定まります.
回目に関しては, 回目の錬金術で生成された数と残った数について錬金術が可能であるかを調べれば良いです.
xxxxxxxxxx
A,B,C = map(int,input().split())
odd = []
even = []
for x in [A,B,C]:
if x%2:
odd.append(x)
else:
even.append(x)
if len(odd)==0:
print(2)
if len(odd)==1:
x = odd[0]
y = (even[0] + even[1]) // 2
print(1 if (x+y)%2 else 2)
if len(odd)==2:
x = (odd[0] + odd[1]) // 2
y = even[0]
print(1 if (x+y)%2 else 2)
if len(odd)==3:
print(2)