C - Candles

ABC 107のC - Candlesについて。

移動最小距離を求める問題。
この手の問題はよく提出されるけど、解法は問題によってもちろん考え方が全然違うので、一度フラットに問題に当たるのが大事。

def solve():

    N, K = [int(i) for i in input().split()]
    xlist = [int(i) for i in input().split()]

    cost = float("inf")
    # 連続する組み合わせの数
    for i in range(N-K+1):
        # iが左端でjが右端
        j = i + K - 1
        cost = min(
            cost,
            # 左から進んだ場合
            abs(xlist[i]) + abs(xlist[j] - xlist[i]),
            # 右から進んだ場合
            abs(xlist[j]) + abs(xlist[i] - xlist[j])
        )
    print(cost)


if __name__ == "__main__":  
    solve()

原点0から移動する、となると往復とかを考えて頭がこんがらがるが、ようは連続した端から端が1番近いものが答えになる。 差の絶対値の考え方もすぐに出てこないので、このへんはなれが必要。