BAPC2018 F - Financial Planning
問題
個の投資先があり、番目の投資先は、費用が (初日のみ)で、1日にユーロの利益が出ます。
投資費用を返済した上で円の利益を得るために必要な最小日数を答えてください。
というものになります。
です。
解法
二分探索をして答えを出します。
すると、結局調べたいものは日で利益円を出すことができるかどうか、になります。
これをで求めることができればよいです。
さて、番目の投資先に投資して日経つと、利益はユーロになります。
すると、ユーロの費用が必要だったので、が最終的な利益になります。
この値が正であれば投資をし、0以下であれば投資をしない、とすれば、日かける場合の最大利益を出すことができます。
よって、が正となるような投資先の合計値がを超えていれば、日で利益円を出すことができ、そうでなければできないことになります。
また、日で利益円を出すことができる場合、同じ投資先だけを選べば、日で少なくとも利益円を出すことができます(は正の値だからです)。よって、日を二分探索で求めることができます。
感想
考察自体はぱっとできました。が、利益の合計を求める際に、long long型ですらオーバーフローする可能性があったことを考慮しきれておらず、WAを2,3回だしました。おそらく英語を解読する方が考察より長かったと思います…
思考の流れとしては、投資先の選び方が無数にあり、そっちから攻めるのが難しそう→日にちを固定してみればどうだろうか、となったところで、まず日と固定して二分探索をする方法が思い浮かびます。
そして、日目に利益が出ているものだけを選べばよいので、で計算できそう、ということで全体としても時間内に計算ができそう!という感じでした。
最後に、最悪ケース(二分探索の端)の計算と、単調性の簡単な裏付けをとって実装、という形です。