結果

問題 No.3681 心の沸騰石
コンテスト
ユーザー kmmtkm
提出日時 2026-09-05 14:02:55
言語 PyPy3
(7.3.23)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 70 ms / 2,000 ms
+ 750µs
コード長 1,880 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 244 ms
コンパイル使用メモリ 95,824 KB
実行使用メモリ 78,976 KB
最終ジャッジ日時 2026-09-05 14:04:18
合計ジャッジ時間 2,910 ms
ジャッジサーバーID
(参考情報)
judge3_1 / judge4_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 13
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

def main():
    r, p, q = map(int, input().split())
    a, b, c, d = map(int, input().split())

    a, b, c = sorted([a, b, c])

    # ルーマニア人最大化が目的なのでまず変えれるだけ変える
    k = min(a, r // p)
    ans = k
    a -= k
    b -= k
    c -= k
    r -= k * p

    ok = r // p > 0
    while ok:
        pa = ans
        if c == 0:
            # 全部緑コーダーから賄うしかない
            k = min(d // 3, r // (3 * q + p))
            ans += k
            d -= 3 * k
            r -= (3 * q + p) * k
            ok = False
        elif b == 0:
            # 青コーダーと緑コーダーで赤と黄を錬成しないといけない
            # まず緑コーダーを使い切って損がない
            k = min(c, d // 2, r // (2 * q + p))
            ans += k
            d -= 2 * k
            c -= k
            r -= (2 * q + p) * k

            # 青コーダーで全部賄う
            k = min(c // 3, r // (2 * q + p))
            ans += k
            c -= 3 * k
            r -= (2 * q + p) * k

            # 青コーダーの余りと緑コーダーのあまり
            if d >= 1 and c >= 2:
                k = r // (2 * q + p)
                d -= k
                c -= 2 * k
                ans += k
                r -= (2 * q + p) * k
        else:
            # 青と黄と緑で赤を錬成
            # まず緑コーダーを使い切って損がない
            k = min(b, c, d, r // (q + p))
            ans += k
            b -= k
            c -= k
            d -= k
            r -= (q + p) * k

            # 青コーダーで赤を賄う
            k = min(b, c // 2, r // (q + p))
            ans += k
            b -= k
            c -= 2 * k
            r -= (q + p) * k
        if pa == ans:
            ok = False

    print(ans)


if __name__ == "__main__":
    main()
0