[关闭]
@11101001 2018-07-25T18:14:35.000000Z 字数 979 阅读 684

bzoj4001: [TJOI2015]概率

生成函数 导数


题目链接

bzoj4001: [TJOI2015]概率论

题解

生成函数+求导
表示有个节点的二叉树的个数,
表示个节点的二叉树叶子节点的个数,
那么
对于
考虑有一颗个点的二叉树,由于左右字数都是二叉树,枚举左右子树的点数


这就是卡特兰数,通项为
对于
枚举左右子树的大小,我们可以有函数推出,由于左右对称,最后

我们要找到的关系
的生成函数,的生成函数

对于他的封闭形式为,(对于另外一根不收敛,舍去)
得到


的每一项求导后变为,也就等于等式右边的 也就是说
带入
化简得到

代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. inline int read() {
  4. int x = 0,f = 1;
  5. char c = getchar();
  6. while(c < '0' || c > '9')c = getchar();
  7. while(c <= '9' && c >= '0')x = x * 10 + c - '0',c = getchar();
  8. return x * f;
  9. }
  10. const int maxn = 1000005;
  11. const int INF = 0x7fffffff;
  12. int main() {
  13. double n;
  14. cin >> n;
  15. printf("%.9lf\n",n * (n + 1.0) / (4 * n -2));
  16. return 0;
  17. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注