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番近いものが答えになる。 差の絶対値の考え方もすぐに出てこないので、このへんはなれが必要。