結果
| 問題 | No.3681 心の沸騰石 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-09-05 14:02:55 |
| 言語 | PyPy3 (7.3.23) |
| 結果 |
AC
|
| 実行時間 | 70 ms / 2,000 ms |
| + 750µs | |
| コード長 | 1,880 bytes |
| 記録 | |
| コンパイル時間 | 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 |
ソースコード
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()