题解 P3978 【[TJOI2015]概率论】
...这道题比楼下说的还要神奇——它不仅代码好写,证明也不用楼下说的那么麻烦。
首先,我们令
找规律第一步当然是打表啦~写个爆搜或者手算都可以。
n | 1 | 2 | 3 | 4 | 5 | ... |
---|---|---|---|---|---|---|
1 | 2 | 5 | 14 | 42 | ... | |
1 | 2 | 6 | 20 | 70 | ... |
我们发现一个规律:
证明这个规律其实超级简单:
- 对于每棵
n 个点的二叉树,如果里面有k 个叶节点,那么我们分别把这k 个叶子删去会得到k 棵n-1 个点的二叉树; - 而每棵
n-1 个点的二叉树恰好有n 个位置可以悬挂一个新的叶子,所以每棵n-1 个点的二叉树被得到了n 次; - 综上,我们即可得出结论:所有
n 个点的二叉树的叶子个数和等于n-1 个点的二叉树个数\times n 。
那么我们只需要求出
边界是
于是答案即为
代入卡特兰数的通项公式
代码:
#include <cstdio>
int main() {
double n;
scanf("%lf", &n);
printf("%.12f", n * (n + 1) / (2 * (2 * n - 1));
return 0;
}