結果

問題 No.2694 The Early Bird Catches The Worm
ユーザー navel_tos
提出日時 2024-03-22 23:13:46
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 176 ms / 2,000 ms
コード長 938 bytes
コンパイル時間 602 ms
コンパイル使用メモリ 82,336 KB
実行使用メモリ 135,220 KB
最終ジャッジ日時 2024-09-30 12:28:28
合計ジャッジ時間 10,960 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 72
権限があれば一括ダウンロードができます

ソースコード

diff #

#yukicoder423D The Early Bird Catches The Worm

N, H = map(int, input().split())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
ans = 0

#累積和を取っておく  なんかに使うと思う
C = [0] * (N + 1)
D = [0] * (N + 1)
for i in range(N):
    C[i + 1] = A[i] + C[i]
    D[i + 1] = B[i] + D[i]
Rt = sat = hel = 0
for Lt in range(N):
    #1. 区間Lt - 1を捨てる
    if Lt:
        sat -= A[Lt - 1]
        #[Lt - 1: Rt)の疲労度が1日分回復
        hel -= D[Rt] - D[Lt - 1]

    if Lt > Rt:
        sat = hel = 0
        Rt = Lt

    #2. 疲れが限界を迎えるまで伸ばす
    while True:
        if Rt == N:
            break
        #Rtを追加したときの疲労度変化をシミュレート
        nxt = hel + B[Rt] * (Rt + 1 - Lt)
        if nxt <= H:
            hel = nxt
            sat += A[Rt]
            Rt += 1
        else: break
    ans = max(ans, sat)
print(ans)
0