なんかコレ↓の類題じゃね?
有識者は最適解を求められるのだろうが、
私は一個一個場合分けしないと edge case を
網羅できる自信が無かった。
WalkingTakahashi.py
x,k,d = map(int,input().split())
cnt = abs(x // d)
if x == 0:
if k%2 == 0:
print(0)
else:
print(d)
elif x > 0:
if abs(k-cnt)%2 == 0:
if k < cnt:
print(abs(x-k*d))
else:
print(abs(x-cnt*d))
else:
if k < cnt:
print(abs(x-k*d))
else:
print(min(abs(x-(cnt+1)*d),abs(x-(cnt-1)*d))) # <= ココ
else:
if abs(k-cnt)%2 == 0:
if k < cnt:
print(abs(x+k*d))
else:
print(abs(x+cnt*d))
else:
if k < cnt:
print(abs(x+k*d))
else:
print(min(abs(x+(cnt+1)*d),abs(x+(cnt-1)*d)))# <= ココ
手探り感、バリバリ(笑)
コメントにある ココ 、記述にあるように cnt+1 or cnt-1 は、その時の状況に合わせて
最小値を選択する必要がある。ここに気付くまでに WA を 2 回引いた。
もっとスマートに、サクッと出来るようになりたい。
まずは自力で辿り着けてホッとした。