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)
計算方法がフィボナッチ数列に似ているので、以下のように考えれば行列累乗で解けそうです。