description
Luogu
BZOJ
求\(n\)个节点二叉树的叶子节点个数期望。
data range
\[n\le 10^9\]
solution
考虑\(期望=\frac{权值总和}{总方案数}=\frac{f_n}{g_n}\)。
推导\(f_i,g_i\)可得
\[f_i=2\sum_{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}\binom{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}\binom{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}\binom{2i}{i}x^i\]
\[F(x)=\sum_{i=0}^{\infty}\binom{2i-2}{i-1}x^i\]
最后答案为
\[\frac{f_n}{g_n}=\frac{\binom{2n-2}{n-1}}{\frac{1}{n+1}\binom{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\n",1.0*(n+1)*n/2/(2*n-1));
return 0;
}