1449:水利攻航勝


質問する



コード#コード#

import sys 
input =sys.stdin.readline 

n,l = map(int,input().split())
places = list(map(int,input().split()))
places.sort()

start = places[0]
end = places[0]+l ; cnt=1

for place in places:
    if end<=place: #사이에 있는 경우 
        start = place
        end = place+l
        cnt+=1

print(cnt)

解説


n,l入力,places入力,並べ替え.
その理由は位置が昇順で見なければ、次から次へと検査できないからです.
次にstart、end変数を初期化し、startは一番前の部分で、endはstartにテープの長さを加えた場所です.
位置から左右に0.5を巻くので、それぞれの位置に1のテープを貼ると思います.
つまり、1,2の位置をブロックするためには、2の長さのテープが必要であり、貼る場所は0.5から2.5の2の長さであり、さらに0.5を加えると1から3と考えられる.
次にforゲートを迂回し、中間の部分を無視し、後ろの部分が前の最後の部分よりも大きい場合、start、endを初期化し、cnt 1をアップロードする.