AtCoder Beginner Contest 175 C - Walking Takahashi 【Python】

https://atcoder.jp/contests/abc175/tasks/abc175_c

AtCoder ProblemsのRecommendationで Difficulty: 417、Solve Probability: 46%でした。

X, K, D = map(int, input().split())
absd = abs(X)
# K*Dが原点を超えない場合
if K * D <= absd:
    print(absd - K * D)
# K*Dが原点を超える場合
else:
    # 原点を超えずに原点手前まで移動する回数
    base_n = absd // D
    # 原点を超えずに原点手前まで移動した後の座標の絶対値
    left_di = absd - D * base_n
    #残りの移動回数
    left_k = K - base_n
    # 残りの移動回数の偶数なら現在の座標、
    # 奇数なら原点を超える向きに1度移動した後の座標が答え
    if left_k % 2 == 0:
        print(left_di)
    else:
        print(D - left_di)