SRM414 Div2 500

問題

ビザを申請するために書類を順番に書かなければならない.その書類を書くためにかかる時間が与えられる.また,大使館は一日の長さがdayLength単位時間の時openTime単位時間空いている.それ以外は閉まっている.このとき,ビザを受け取るために必要な最小時間を返す.
例えば,書類を書くためにかかる時間はそれぞれforms={4,4,4,4}で,dayLength=24,openTime=8の場合,
大使館が開く4単位時間前に書き始めて開いたと同時に提出,すぐに次の2つを書いて提出,のこりの1つは書き終わっても大使館があくまで待たなければならないので,答えは28単位時間.

考え方

それぞれ書き終わった時間をnowとする.もし(now+forms[i])%dayLengthがopenTime以下ならば書いてすぐに提出できるので,合計時間にforms[i]を追加するだけでいい.now=(now+forms[i])%dayLength.
もしそれ以外の場合は,forms[i]の時間に加えて開くまで待つ時間を合計時間に加えなければいけない.now=(now+forms[i])%dayLengthとすると,dayLength-nowが待ち時間となるので,合計時間にはforms[i]+(dayLength-now)を加える.そして待ったのでnow=0となる.
また,最初の書類を書いて提出する時間によって変わるので,一つ目の書類でnowを0からopenTimeまで動かした場合について上記をシミュレーションして最小合計時間を返す.