题目描述

输入

输入一个正整数N,代表有根树的结点数

输出

输出这棵树期望的叶子节点数。要求误差小于1e-9

样例输入

1

样例输出

1.000000000


题解

生成函数+导数

先考虑节点个数为$n$的二叉树有多少个:$c_0=1,c_i=\sum\limits_{j=0}^{i-1}c_j*c_{i-j-1}$,显然这是Catalan数。

令其生成函数为$F(x)$,由其递推式可以列出方程:$F(x)=xF(x)^2+1$,解得:

$F(x)=\frac{1-\sqrt{1-4x}}{2x}$

(此处根号前面不能取负号,因为如果取正,分子上常数项不为$0$,就会出现$\frac 1x$项,它在生成函数中是无意义的($f(0)$无意义))

然后设有$i$个节点的二叉树的期望叶子节点个数为$p_i$,那么$p_i=\frac{\sum\limits_{j=0}^{i-1}c_jc_{i-j-1}(p_j+p_{i-j-1})}{c_i}$。

设$t_i=c_ip_i$,那么就有$t_1=1,t_i=\sum\limits_{j=0}^{i-1}(c_jt_{i-j-1}+c_{i-j-1}t_j)=2\sum\limits_{j=0}^{i-1}c_jt_{i-j-1}$。

于是再令$t$的生成函数为$G(x)$,那么有$G(x)=2xF(x)G(x)+x$,解出:

$G(x)=\frac x{\sqrt{1-4x}}$

接下来是戏剧性的一幕:

$(xF(x))'=\frac 1{\sqrt{1-4x}}=\frac{G(x)}x$

这说明F与G的每一项都是有联系的。考虑$xF(x)$的每一项:$x·c_nx^n=c_nx^{n+1}$,求导之后变为$(n+1)c_nx^n$,而等式右端对应的项为$\frac{t_{n+1}x^{n+1}}x=t_{n+1}x^n$,因此说明$t_{n+1}=(n+1)c_n$,即:

$t_n=nc_{n-1}$

又因为$t_n=c_np_n$,所以有:

$p_n=\frac{nc_{n-1}}{c_n}$

而又因为$c$为卡特兰数,因此$c_n=\frac{C_{2n}^n}{n+1}$。所以把式子带进去,就可以推出:

$p_n=\frac{n(n+1)}{2(2n-1)}$

貌似本题如果在考场上的话直接打表都能推出结论吧。。。

代码还要看吗?。。。

#include <cstdio>
int main()
{
double n;
scanf("%lf" , &n);
printf("%.9lf\n" , n * (n + 1) / (2 * n - 1) / 2);
return 0;
}

【bzoj4001】[TJOI2015]概率论 生成函数+导数的更多相关文章

  1. bzoj4001: [TJOI2015]概率论

    题目链接 bzoj4001: [TJOI2015]概率论 题解 生成函数+求导 设\(g(n)\)表示有\(n\)个节点的二叉树的个数,\(g(0) = 1\) 设\(f(x)\)表示\(n\)个节点 ...

  2. BZOJ4001 TJOI2015概率论(生成函数+卡特兰数)

    设f(n)为n个节点的二叉树个数,g(n)为n个节点的二叉树的叶子数量之和.则答案为g(n)/f(n). 显然f(n)为卡特兰数.有递推式f(n)=Σf(i)f(n-i-1) (i=0~n-1). 类 ...

  3. 2018.12.31 bzoj4001: [TJOI2015]概率论(生成函数)

    传送门 生成函数好题. 题意简述:求nnn个点的树的叶子数期望值. 思路: 考虑fnf_nfn​表示nnn个节点的树的数量. 所以有递推式f0=1,fn=∑i=0n−1fifn−1−i(n>0) ...

  4. BZOJ4001 [TJOI2015]概率论 【生成函数】

    题目链接 BZOJ4001 题解 Miskcoo 太神了,orz #include<algorithm> #include<iostream> #include<cstr ...

  5. BZOJ4001[TJOI2015]概率论——卡特兰数

    题目描述 输入 输入一个正整数N,代表有根树的结点数 输出 输出这棵树期望的叶子节点数.要求误差小于1e-9 样例输入 1 样例输出 1.000000000 提示 1<=N<=10^9 设 ...

  6. BZOJ4001:[TJOI2015]概率论(卡特兰数,概率期望)

    Description Input 输入一个正整数N,代表有根树的结点数 Output 输出这棵树期望的叶子节点数.要求误差小于1e-9 Sample Input 1 Sample Output 1. ...

  7. 【BZOJ4001】[TJOI2015]概率论(生成函数)

    [BZOJ4001][TJOI2015]概率论(生成函数) 题面 BZOJ 洛谷 题解 这题好仙啊.... 设\(g_n\)表示\(n\)个点的二叉树个数,\(f_n\)表示\(n\)个点的二叉树的叶 ...

  8. 4001: [TJOI2015]概率论

    4001: [TJOI2015]概率论 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 262  Solved: 108[Submit][Status] ...

  9. [TJOI2015]概率论

    [TJOI2015]概率论 史上最短黑题 看起来一脸懵逼,没有取模,1e-9 根据期望定义,发现 分母是一个卡特兰数,,,,不能直接算 所以考虑怎么消掉一些东西 gn表示n个点的叶子个数和,fn表示n ...

随机推荐

  1. CI的子目录控制器问题

    不管是根目录还是子目录里面的文件名必须是首字母大写,否则会报404

  2. 解决mysql远程连接失败的问题

    问题描述 在我远程连接我的服务器数据库的时候,navicat给我提示了这么一个错误: ERROR : Host 'xxx' is not allowed to connect to thisMySQL ...

  3. 【整理】PHP获取客户端真实IP地址详解

    php获取客户端IP地址有四种方法,这五种方法分别为REMOTE_ADDR.HTTP_CLIENT_IP.HTTP_X_FORWARDED_FOR.HTTP_VIA. REMOTE_ADDR 是你的客 ...

  4. python 一些基础知识

    Python 注释的原理: 原理:根据对象的引用计数器,对象创建会给对象一个引用计数器属性.如果该属性的值为0,那么该对象会被释放.创建一个字符串对象,但是没有任何引用,计数器为0. Python小整 ...

  5. html常用的实体符号

    HTML中有用的字符实体 字符实体的书写方式如:&entity_name(实体名称法) 或 &#entity_number(实体数字法) 例如用字符实体的形式表示小于号:< 或 ...

  6. 722. Remove Comments

    class Solution { public: vector<string> removeComments(vector<string>& source) { vec ...

  7. 笔记-scrapy-去重

    笔记-scrapy-去重 1.      scrapy 去重 scrapy 版本:1.5.0 第一步是要找到去重的代码,scrapy在请求入列前去重,具体源码在scheduler.py: def en ...

  8. 9.3centos7安装python3 以及tab补全功能

    1.安装python3 1.1下载python源码包 网址:https://www.python.org/downloads/release/python-362/ 下载地址:https://www. ...

  9. android IPC 进程间通讯

    参考资料: http://blog.csdn.net/birdsaction/article/details/39451849 在这里我说一下学习技术的方法,别人的博客,别人的东西,再简单,自己没有写 ...

  10. Java继承的缺点

    转载自:https://www.cnblogs.com/xz816111/archive/2018/05/24/9080173.html JAVA中使用到继承就会有两个无法回避的缺点: 1.打破了封装 ...