[TJOI2015]概率论
壹、题目描述
贰、题解
这道题使用的期望概率方案是:“整体 / 整体”.
我们考虑最后的答案就是 “所有有 \(n\) 个点二叉树的叶子数的总数 / 有 \(n\) 个点的二叉树个数”,那么我们定义一些变量:
- \(f_i\) 表示所有有 \(i\) 个点二叉树的叶子数的总数,\(f_0=0,f_1=1\);
- \(g_i\) 表示有 \(i\) 个点的二叉树个数,\(g_0=1\);
答案为 \(f_n\over g_n\).
考虑 \(g_i\) 有转移
下标减一是因为有根,不难看出这是卡塔兰数,可得通项 \(g_n={1\over n+1}{2n\choose n}\).
对于 \(f_i\) 的转移,我们考虑枚举其中一棵子树的叶子,但是考虑左右对称,还得带上一个 \(2\) 的系数,那么有
下标差一还是因为有一个点拿来当根。
考虑使用生成函数:定义 \(G(x)\) 为 \(g_i\) 的普通生成函数,\(F(x)\) 为 \(f_i\) 的普通生成函数,由 这篇文章的 贰·四 部分 可得
同时,由 \(f_n=2\sum_{i=0}^{n-1}f_ig_{n-i-1}\) 可得
其中,\(\times x\) 是因为下标差一,\(+x\) 是为了处理 \(f_1=1\) 的特殊情形。
将 \(G(x)={1-\sqrt{1-4x}\over 2x}\) 带入,可得
发现出现了 \(\sqrt{1-4x}\),我们考虑使用 \(G(x)\) 凑出这个部分。
发现有 \((xG(x))'={1\over \sqrt{1-4x}}\),那么有
也就是说,\(G(x)\) 中的 \(g_nx^n\) 这一项求导之后变成 \(ng_nx^{n-1}\) 乘上 \(x\) 变成 \(ng_nx^n\),这一项系数为 \(g_n\times n\),它和 \(F(x)\) 中的 \(f_{n+1}x^{n+1}\) 除以 \(x\) 之后变成了 \(f_{n+1}x^n\),这两项系数是一样的,说明
而我们要求的是
时间复杂度竟然达到了惊人的 \(\Theta (1)\)!
叁、参考代码
输入输出都有人参考的吗?
肆、用到の小 \(\tt trick\)
本题使用求期望的方案是 整体/整体 。
另外,惊人地发现 “有 \(i\) 个点的二叉树个数” 其实就是卡塔兰数的第 \(i\) 项。