Educational Codeforces Round 78: F Cards
色々な解法があるようなので理解のために調べてまとめてみた。
問題概要
https://codeforces.com/contest/1278/problem/F
TLを見たところ(1)~(4)の解法が考えられるようだ。
(1)自分の解法 (ゴチャゴチャやる)
(JOKERをx枚引く確率)とおくとが成り立つ。
このときFPSをのようにおくと、二項定理よりが成り立つ。
ここで、なるについて、「Tで微分してT倍する」という操作をk回行った関数をとおくと、
のように係数がTのべき数倍されていき、一般にとなる。
求めたい値はであるため、に上記の操作を回行ってを代入すればよいとわかり、あとは適切な式変形をすると のDPに持ち込める。
(2)モーメント母関数
モーメント母関数の意味と具体例 | 高校数学の美しい物語
積率母関数 - Wikipedia
詳しくはよく知らないが、リンク先を読んでやることをまとめると
(a) にを代入する
(b) 次の係数を求めると、それが答え
となる。すごい(こなみかん) よっての次の項をFPSのpowを使ってで求めればよい。
(3) 多項式補間
P(T)の回微分()にを代入していくと以下の式が導かれる。
( は下降階乗冪)
これが求まれば、あとは
を満たす係数をニュートン補間で求めればでが求まる。
(は性質の良い数列なので式変形や包除などにより係数を直接導出することも可能。後述。)
(4) スターリング数
editorialはこの解き方で解説されているようだ。
確率変数を「番目にジョーカーを引いたら1、引かなかったら0」となるようにとる。この時、
であり、さらに期待値の線形性を用いると、
となる。(i種類のものを全て使うようにkコ選ぶ)というのはいわゆる第二種スターリング数なので、包除や漸化式を用いてで計算できる。
(1)と(2)は同値
について、以下の操作は変数変換すれば等しいとわかる。
(a) をで微分して倍する操作を回繰り返してを代入する
(b)をで微分する操作を回繰り返してを代入する
また、(b)の操作はの次の項を求めるのに等しい。
(3)と(4)は同値
途中で補間により求めた数列は実は第二種スターリング数の定義である。
よってやってることはだいたい同じ(論理の飛躍さん…)
(2)と(4)は同値
(4)で得られた式を第二種スターリング数 を用いて書き直す。
ところで第二種スターリング数は、実はの 次の係数である。
(形式的)べき級数と数え上げの写像12相との関係性 前編 - Senの競技プログラミング備忘録
また、(2)の式を変形すると
となる。( は1次以上であることからsumの範囲が以下に限定されることを用いた)
よってスターリング数のFPS表記と合わせると確かに(2)と(4)は同じ式である。
おわりに
気になったので色々調べてみてまとめたが、正直よくわかってないところも多い。間違いがあったらご指摘いただけると助かります。