ARC101 C candles

やっぱ難しいなぁ、競プロ。

左右に行ききするタイプ+k個連続のスリットのようなものを動かすみたいなイメージ。

drken1215.hatenablog.com

この方のwiteupを見た。 スリットを動かすみたいのはわかったけど、コードに落とせなかった。

以下、pythonで書いたもの。全く同じ(正確には違う)で載せるのも憚られるのですが、すみません。

def main():
    n,k = [int(i) for i in input().split()]
    candles = [int(i) for i in input().split()]
    i = 0
    res=1<<60;
    while i+k-1<n:
        left = candles[i]
        right = candles[i+k-1]
        res = min(res,min(abs(left),abs(right))+right-left)
        i+=1
    print(res)

if __name__ == '__main__':
    main()
min(abs(left),abs(right))+(right-left)

この部分は(right-left)でこの区間を走査する時間でabsではじめに右に行くか左に行くか決めてるっぽい。 イメージはある区間の一番端に一度行って、逆の端に走って行くという感じ。

学んだこと

  • 個数が決まったスリットの動かし方
  • 考え方

最初、0からスタートするし、0 に一番近いところから取ってって...と考えていたので、その時点で方向性が違ったように感じる。久々に、C解けなかったなぁ。自信なくすなぁ。