座標Xにいる高橋君がDの移動をK回繰り返した後、座標の絶対値としてあり得る値の最小値を求める問題です。
提出
x, k, d = map(int, input().split())
x = abs(x)
e = x//d
if e>k:
print(x-d*k)
else:
if (k-e)%2 == 0:
print(abs(x-d*e))
else:
print(abs(x-d*(e+1)))
入力はすべて整数です。
Xの条件として、正と負がありますが、どちらもあり得る絶対値の最小値は同じものとなるので、最初から正だけで考えていきます。
実際に1015回分の移動を調べていては時間が足りなくなるため、場合わけをして考えます。
すべての回数分の移動(d×k)よりも、xが大きい場合は、0に近づくことしかできず、「x-d×k」が答えになります。
それ以外では、0に近づいた後の残りの移動回数で判断します。
「x-D」を繰り返し、0を飛び越えた後は、飛び越える前と飛び越えた後の値を繰り返すだけになり、どちらかが答えになります。
「e = x//d」が、0を飛び越える前の回数です。
「k-e」が偶数の場合は「飛び越える前の値(x-d×e)」、奇数の場合は「飛び越えた後の値(x-d×(e+1))」が答えとなります。