AtCoder Beginner Contest 280 備忘録
コンテストページ:
コンテスト中AC: A〜E
D - Factorial and Multiple
制約上、くらいの解法、すなわち素因数分解や約数を利用した解法を疑います。今回は素因数分解で解けました。
が素因数を1つだけ持つとします。はの素因数を全て含む必要がありますが、は合成数ではないので、2つ以上の正整数の積で表すことができません。従って、少なくともは必要であり、であることが確定します。
が2個含まれる場合を考えると、の次にが現れるのはなので、が確定します。
一般化すると以下が言えそうですが、これは誤りです。
に素因数が個含まれる時、が成り立つ
反例として、があります。
2が3個含まれるので、が必要かといえば、そうではなく、で達成できます。
これはの倍数にが2個以上含まれることによって発生しています。
そこで、以下は成り立つと言えます。
に素因数が個含まれるとする。の順に探索し、の数が個以上に初めてなるものをとするとき、が成り立つ
これをに含まれる素因数全てについて求めていきます。
と素因数分解されたとすれば、各素因数について前述の値を求め、それらをとすると、
が成り立つ必要があるので、としてとりうる最小値はであり、これが答えです。
かなり大雑把に計算量を見積もります(間違っていたらすみません)。
素因数は2以上なので、素因数の個数の和は個以下です。よって、各素因数について各倍数を調べる部分は合計回以下です。また、各倍数に含まれる素因数の個数もを超えないはずなので、かなり大雑把に見積もってもで済みます。
そのため、おそらく素因数分解の計算量がボトルネックとなります。
素因数分解はあまり効率的ではない試し割りであっても、くらいかと思います。(素因数の個数が合計で個以下なので、同じ素因数で複数回割る部分を考慮してをつけましたが、不要かもしれません)
提出コード: Submission #36979663 - Denso Create Programming Contest 2022 Winter(AtCoder Beginner Contest 280)
E - Critical Hit
期待値DPの典型的な考え方で解けます。
状態が遷移元でその期待値をとする。
状態に遷移し、
遷移先の期待値がで、
遷移する確率がで、
遷移にかかる操作回数がの時、
今回の場合、体力がの状態からは、
体力がとの状態に遷移し、
遷移する確率が、で、
遷移にかかる操作回数が、いずれも回なので、
この式に従って計算すれば、メモ化再帰やDPなどで解けます。
なお、メモ化再帰ではとなる場合の処理について注意します。
提出コード: Submission #36983677 - Denso Create Programming Contest 2022 Winter(AtCoder Beginner Contest 280)
計算方法がフィボナッチ数列に似ているので、以下のように考えれば行列累乗で解けそうです。