geam1113’s diary

主にAtcoderのコンテストの備忘録を書きます。AtCoder緑と水色を行ったり来たりしています。

AtCoder Beginner Contest 280 備忘録

コンテストページ:
コンテスト中AC: A〜E

D - Factorial and Multiple

制約上、O(\sqrt{K})くらいの解法、すなわち素因数分解や約数を利用した解法を疑います。今回は素因数分解で解けました。

Kが素因数pを1つだけ持つとします。N!Kの素因数を全て含む必要がありますが、p合成数ではないので、2つ以上の正整数の積で表すことができません。従って、少なくともp!は必要であり、N\geq pであることが確定します。

pが2個含まれる場合を考えると、p!の次にpが現れるのは2p!なので、N\geq 2pが確定します。

一般化すると以下が言えそうですが、これは誤りです。

Kに素因数pe個含まれる時、N\geq epが成り立つ

反例として、K=8があります。
2が3個含まれるので、N\geq 6が必要かといえば、そうではなく、N\geq 4で達成できます。
これはpの倍数にpが2個以上含まれることによって発生しています。

そこで、以下は成り立つと言えます。

Kに素因数pe個含まれるとする。p,2p,\cdots epの順に探索し、pの数がe個以上に初めてなるものをkpとするとき、N\geq kpが成り立つ

これをKに含まれる素因数全てについて求めていきます。
K=p_1^{e_1}\times p_2^{e_2} \times \cdots \times p_m^{e_m}素因数分解されたとすれば、各素因数について前述の値を求め、それらをx_1,x_2,\cdots ,x_mとすると、

N\geq max\{x_1,x_2,\cdots x_m\}

が成り立つ必要があるので、Nとしてとりうる最小値はmax\{x_1,x_2,\cdots x_m\}であり、これが答えです。

かなり大雑把に計算量を見積もります(間違っていたらすみません)。
素因数は2以上なので、素因数の個数の和はlogK個以下です。よって、各素因数について各倍数を調べる部分は合計logK回以下です。また、各倍数に含まれる素因数の個数もlogKを超えないはずなので、かなり大雑把に見積もってもO(log^2 K)で済みます。

そのため、おそらく素因数分解の計算量がボトルネックとなります。
素因数分解はあまり効率的ではない試し割りであっても、O(\sqrt{K} + logK)くらいかと思います。(素因数の個数が合計でlogK個以下なので、同じ素因数で複数回割る部分を考慮してlogKをつけましたが、不要かもしれません)

提出コード: Submission #36979663 - Denso Create Programming Contest 2022 Winter(AtCoder Beginner Contest 280)

E - Critical Hit

期待値DPの典型的な考え方で解けます。

状態uが遷移元でその期待値をE_uとする。
状態v_1,v_2,\cdots v_mに遷移し、
遷移先の期待値がE_{v_1},E_{v_2},\cdots E_{v_m}で、
遷移する確率がp_{v_1},p_{v_2},\cdots p_{v_m}で、
遷移にかかる操作回数がw_{v_1},w_{v_2},\cdots w_{v_m}の時、
E_u = p_{v_1}(E_{v_1} + w_{v_1}) + p_{v_2}(E_{v_2} + w_{v_2})+\cdots + p_{v_m}(E_{v_m} + w_{v_m})

今回の場合、体力がiの状態からは、
体力がi-2i-1の状態に遷移し、
遷移する確率が\frac{P}{100}\frac{100-P}{100}で、
遷移にかかる操作回数が、いずれも1回なので、

E_i = \frac{P}{100}(E_{i-2}+1) + \frac{100-P}{100}(E_{i-1}+1)

この式に従って計算すれば、メモ化再帰やDPなどで解けます。
なお、メモ化再帰ではi\lt 0となる場合の処理について注意します。

提出コード: Submission #36983677 - Denso Create Programming Contest 2022 Winter(AtCoder Beginner Contest 280)

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



\begin{pmatrix}
E_{N+1} \\
E_N \\
\end{pmatrix}

=

\begin{pmatrix}
  \frac{100-P}{100} &  \frac{P}{100} \\
1 & 0 \\
\end{pmatrix}

\begin{pmatrix}
E_{N} \\
E_{N-1} \\
\end{pmatrix}

=

\begin{pmatrix}
  \frac{100-P}{100} &  \frac{P}{100} \\
1 & 0 \\
\end{pmatrix}^N

\begin{pmatrix}
E_{1} \\
E_{0} \\
\end{pmatrix}