Codeforces Round #560 (Div. 3)F2. Microtransactions (hard version)
問題概要
個の商品があり, 各商品の値段は基本 円である. 長さ の数列 が与えられ, これは 番目の商品を 個だけ購入する必要があることを示している.
上記とは別に, 個のセール情報 が与えられる. 番目のセール情報は, 日目に 番目の商品が 円で購入できることを示している.
日の始まりに 円だけ入手することができる. 1日に何個でも商品を購入できるとき, の条件をすべて満たすには最低何日かかるか?
制約
- の総和は 以上 以下
解法
明らかに二分探索です. 日で条件を満たせるか?という判定問題を考えましょう.
各商品のセールのうち, その商品の一番最後のセールで商品を買い, それより前のセールでは商品を買わないのが最適です(後にまわすことによるデメリットがありません). よって, 全ての商品につき一番最後のセールで買えるだけ買うのを繰り返し, 最終日に残金で帳尻合わせをします. ここで条件を満たせるなら Yes, 満たせないなら No をすればいいです.
実装
Submission #147408396 - Codeforces