【ABC175 C】「Walking Takahashi」を解く【Python3】

「AtCoder」解説一覧へ

座標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))」が答えとなります。

【ABC175】解説記事リスト

「AtCoder」解説一覧に戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です