https://atcoder.jp/contests/abc126/tasks/abc126_c
解説
https://atcoder.jp/contests/abc126/submissions/5476041
シミュレーションしながら、答えを導いていこう。
サイコロで[1,N]のどれが出るかを全探索しよう。
そこから、コインを振って、得点が倍になる場合に限って確率を求める。
最初のサイコロで出る値で全探索すれば、排反なので、総和を取ると答え。
int N, K; //--------------------------------------------------------------------------------------------------- void _main() { cin >> N >> K; double ans = 0; rep(x, 1, N + 1) { int y = x; double q = 1.0 / N; while (y < K) { y *= 2; q /= 2; } ans += q; } printf("%.10f\n", ans); }