[TJOI2015]概率论 description data range solution Code
Luogu
BZOJ
求(n)个节点二叉树的叶子节点个数期望。
data range
[nle 10^9
]
solution
考虑(期望=frac{权值总和}{总方案数}=frac{f_n}{g_n})。
推导(f_i,g_i)可得
[f_i=2sum_{j=0}^{i-1}f_jg_{i-j-1}
]
[g_i=sum_{j=0}^{i-1}g_jg_{i-j-1}
]
考虑其生成函数(F(x),G(x)),则
[F(x)=2F(x)G(x)x+x
]
[G(x)=G^2(x)+1
]
于是有
[G(x)=frac{1-sqrt{1-4x}}{2x}
]
[F(x)=frac{x}{sqrt{1-4x}}
]
可以知道(g_i)就是卡特兰数。
对((1-4x)^{frac{1}{2}})和((1-4x)^{-frac{1}{2}})暴力泰勒展开得
[(1-4x)^{frac{1}{2}}=1-sum_{i=1}^{infty}frac{(2i-3)!!2^i}{i!}x^i=1-sum_{i=1}^{infty}frac{2}{i}inom{2i-2}{i-2}x^i
]
[(1-4x)^{-frac{1}{2}}=1+sum_{i=1}^{infty}frac{(2i-1)!!2^i}{i!}x^i=1+sum_{i=1}^{infty}frac{2}{i}inom{2i}{i}x^i
]
其中(n!!)表示(n(n-2)(n-4)(n-6)...(1+[n\%2=1])),即(n)的双阶乘。
于是我们可以得到
[G(x)=sum_{i=0}^{infty}frac{1}{i+1}inom{2i}{i}x^i
]
[F(x)=sum_{i=0}^{infty}inom{2i-2}{i-1}x^i
]
最后答案为
[frac{f_n}{g_n}=frac{inom{2n-2}{n-1}}{frac{1}{n+1}inom{2n}{n}}=frac{n(n+1)}{2(2n-1)}
]
Code
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;scanf("%d",&n);
printf("%.9lf
",1.0*(n+1)*n/2/(2*n-1));
return 0;
}