mini notes

競技プログラミングの解法メモを残していきます。

ABC140 F - Many Slimes

問題:F - Many Slimes

解答:Submission #11471423 - AtCoder Beginner Contest 140

解法:アルゴリズムとしては下記の通り。

A:「今までに生んだ子の集合」、B:「ソート済みのこれから生む子の集合」とする。A = {sの最大値}からスタートする。Aの各要素について、Bの中で生める最も大きな要素を生むとする。生んだ子は集合Aに加える。これを繰り返し、Bが空になればYes、途中で子が生めなくなればNo。

Bはソート済みである必要があるのでmultisetを使うとやりやすい。

ハマった嘘貪欲としては、sを降順ソート済みとし、s0からs1, s2, s4,...が生まれ、s1からs3, s5が生まれ…、のようなもの。これの反例はs0がずっとs0 - 1を生み出すような例。