期待値関連の問題ですね.期待値の性質で今回はじめて知ったものがあったので紹介します.
問題
公式問題はコチラ.
問題文
操作:
ただし,頂点を選ぶ確率はすべて
制約
解説
考え方
公式解説はコチラ.
結構重要なことですが,以下の事実があるようです.これ知らないと解けませんね ^^;;
確率
で成功する試行を、成功するまで行うときの試行回数(最後の成功した回も含む) の期待値は である。 証明:
https://atcoder.jp/contests/abc194/editorial/823
求める期待値をとする。1 回試行して、成功したらそこで終わり、失敗したら全く同じ状況でやり直しなので という等式が成り立つ。
変形してなので である。
上記の証明が私にはあまりしっくり来なかったのですが,別のサイトの以下の文面でしっくりきました.失敗したときは 1 回試行が追加されるので期待値が
なお,期待値の意味を考えて
https://manabitimes.jp/math/1094という漸化式を立てて一発で導出することもできる。
たとえば,
また,頂点が 3 つのときを考えると,「頂点
ここで,すでに連結した頂点の集合を
これは
ソースコード
#include <bits/stdc++.h>
#include <math.h>
#include <string>
using namespace std;
int main(void) {
int N;
cin >> N;
double ans = 0;
for (int i=1; i<N; i++) {
ans += (double)N / i;
}
printf("%0.10f\n", ans);
return 0;
}
はじめ cout
で表示していたのですが,WA となってしまったので printf
で %0.10f
をつけてみたら AC しました.以下の指定がある場合は小数点 6 桁までの表示は必要そうですね.
想定解答との絶対誤差または相対誤差が
https://atcoder.jp/contests/abc194/tasks/abc194_d以下であれば正解として扱われる。
以下の記事も参考にしました.
まとめ
期待値の性質を知っていないとなかなか厳しい問題ですね.勉強になりました.
コメント