問題概要
問題ページ
-
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()