ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

ABC063 D - Widespread

問題
提出コード

解法

全員を倒すまでにかかる回数が、最悪10^{9}回なので、O(N)O(NlogN)ぐらいまで計算量を落としたいです。
すると、倒すのにかかる回数を二分探索すると、うまくO(N)とlogの計算量に落ち着きそうです。
倒すのにかかる回数を二分探索するということで、
k回魔法をうったときに全ての魔物を倒せるかどうか、ということをO(N)ぐらいで調べることができれば、あとは二分探索するだけになります。
k回魔法をうつので、全ての魔物に対してB×kのダメージが入ります。
k回分、任意の1体には、Bのダメージの代わりにAのダメージを与えることができます。 これは、(A-B)を上乗せでk回与えるのと同じことです。
ということで、B×kのダメージで倒しきれていない相手に対して、k回分の(A-B)のダメージを与えることで、全ての魔物を倒しきることができれば、k回の魔法で相手を全滅させることができます。
逆に、1体でも体力が1以上余っていれば、k回の魔法では倒しきることができません。
あとは、魔法をうって相手を全滅させることのできる回数の最小値を二分探索で求めれば、この問題が解けます。