209AC - ABC107C: Candles
ABC107-C (300 points)
問題
数直線上に置かれた 本のろうそくのうち, 本に火を付けるのに必要な最小の時間を求める.
- 原点からスタート, 左右に速度 で移動可能
- 入力は全て整数
方針
最適解の形を想像する.
- ろうそくを飛び飛びにつけることはないので, 本目から 本目まで火をつけることを考える.
- 原点 -> 本目 -> 本目 or 原点 -> 本目 -> 本目
# 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))