ABC175 C - Walking Takahashi に挑戦した




なんかコレ↓の類題じゃね?

有識者は最適解を求められるのだろうが、
私は一個一個場合分けしないと 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 回引いた。

もっとスマートに、サクッと出来るようになりたい。
まずは自力で辿り着けてホッとした。