ARC101 C candles
やっぱ難しいなぁ、競プロ。
左右に行ききするタイプ+k個連続のスリットのようなものを動かすみたいなイメージ。
この方の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解けなかったなぁ。自信なくすなぁ。