バイトの競プロメモ

主に競技プログラミング

E - Black or White

https://atcoder.jp/contests/exawizards2019/tasks/exawizards2019_e

 

解法

ほとんどの状態でi番目に黒を引く確率は1/2となる

例外はi番目に「黒が残っていない場合」と「白が残っていない場合」である

 

i番目に黒が残っていない確率をpiとすると

pi = p(i-1) + (i-1 C b-1) / 2^(i-1) / 2 

前回までに黒が無くなる確率と今回無くなる確率の足し合わせでこうなる

 

qiをi番目に白が残っていない確率とすると

答えは白と黒が残っている場合と白が残っていない場合の足し合わせになる

(1 - pi - qi) / 2 + qi

 

https://atcoder.jp/contests/exawizards2019/submissions/4874103

void solve() {
int b, w;
cin >> b >> w;
//基本1/2
mint nb = 0, nw = 0;//no
rep(i, 1, b + w + 1) {
// どっちも 黒しか
mint res = (1 - nb - nw) / 2 + nw;
cout << res << endl;

//新しく駄目になる 今回b
nb += com(i - 1, b - 1) / mpow(2, i - 1) / 2;
nw += com(i - 1, w - 1) / mpow(2, i - 1) / 2;
}

}