umineko-sephi’s blog

いろいろ書きます

Educational Codeforces Round 78 (Rated for Div. 2) F. Cards

主にCodeForcesの問題で、一度通した問題の解法を忘れないために特徴的だった問題の解法を記事にまとめることにしました。日本語で詳しく解説してくれている人がいなかったのでこの問題を一問目の記事にします。

 

https://codeforces.com/contest/1278/problem/F

 

問題

m枚のカードに一枚ジョーカーが含まれている。山札をシャッフルした後一枚のカードを引いて、山札に戻すという行為をn回繰り返す。ジョーカーを引いた回数をxとしたときx^kの期待値をmod 998244353で求めよ。

 

制約

1 \le n,m \lt 998244353,1 \le k \le 5000

 

解法

愚直に0からn回ジョーカーを引く確率を求めて期待値を算出するのではnの制約から間に合わない。kの制約が小さいのでこれを利用する。

x^kというのはn回の試行からジョーカーを引くことができた回を重複ありでk個選ぶ通りの数と言い換えることができる。つまりk個選んだ時全てジョーカーを引けているか、と考えればよい。

ここで重複ありでk個選ぶ時、1~k個の独立した試行を選ぶことになる。i個の独立した試行を選んだ時全てジョーカーである確率はもちろん(1/m)^iとなる。あとはi個の独立した試行を選ぶ通り数を求めれば期待値が求まる。

dp[ i ][ j ] := j個の独立な試行からi個選んでいるような通り数

と置くことで、上述の値は求めることができるのでこれでx^kの期待値を求めることができた。

 

 自分の提出

codeforces.com