Edit

【pythonでABC175を解説】C - Walking Takahashi

問題概要

問題ページ

問題文

数直線上で暮らす高橋君は、今座標 \(X\) にいます。これから高橋君はちょうど \(K\) 回、座標の正または負の方向に \(D\) 移動する行為を繰り返そうと考えています。

より正確には、\(1\) 回の移動では 座標 \(x\) から \(x + D\) または \(x - D\) に移動できます。

高橋君は、ちょうど \(K\) 回移動した後にいる座標の絶対値が最小となるように移動したいです。

\(K\) 回の移動後の座標の絶対値としてあり得る値の最小値を求めてください。

制約

  • \(-10^{15} \leq X \leq 10^{15}\)
  • \(1 \leq K \leq 10^{15}\)
  • \(1 \leq D \leq 10^{15}\)
  • 入力は全て整数である

問題の考察

ACコード

import sys


def solve():
    readline = sys.stdin.buffer.readline
    mod = 10 ** 9 + 7
    x, k, d = list(map(int, readline().split()))
    if abs(x) >= abs(k * d):
        print(abs(x) - abs(k * d))
    else:
        dv, md = divmod(abs(x), d)
        print(md if (k - dv) % 2 == 0 else d - md)


if __name__ == '__main__':
    solve()

プログラミング

-Edit
-