209AC - ABC107C: Candles

ABC107-C (300 points)
問題

数直線上に置かれた  N 本のろうそくのうち,  K 本に火を付けるのに必要な最小の時間を求める.

  • 原点からスタート, 左右に速度  1 で移動可能
  •  1 \leq N \leq 10^5
  •  1 \leq K \leq N
  •  |x_i| \leq 10^8
  •  x_1 < x_2 < \ldots < x_N
  • 入力は全て整数
方針

最適解の形を想像する.

  • ろうそくを飛び飛びにつけることはないので,  i 本目から  i + K - 1 本目まで火をつけることを考える.
  • 原点 ->  i 本目 ->  i + K - 1 本目 or 原点 ->  i + K - 1 本目 ->  i 本目
# input
n, k = map(int, input().split())
X = list(map(int, input().split()))

# 飛び飛びで塗ることはない -> X[i] ~ X[i + k - 1] を全て塗る
# i = 1, ..., n - k + 1 について所要時間を調べる
# 原点 -> X[i] -> X[i + k - 1] or 原点 -> X[i + k - 1] -> X[i]
D = []
for i in range(n - k + 1):
    t1 = abs(X[i]) + (X[i + k - 1] - X[i])
    t2 = abs(X[i + k - 1]) + (X[i + k - 1] - X[i])
    D.append(min(t1, t2))

print(min(D))