题目描述

输入

输入一个正整数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. =>符号的意义

    => 是 Oracle 中调用存储过程的时候, 指定参数名进行调用.一般是, 某些参数有默认值的时候,你需要跳过某些参数来进行调用. 下面是具体的例子. 参数的默认值SQL> CREATE ...

  2. forEach、for...in、for...of

    forEach 数组实例的遍历方法 const arr=['red', 'green', 'blue']; arr.forEach(function(element, index) { console ...

  3. 获取Grid后台动态添加的子项

    例:Grid的子项是包含边框的复选框CheckBox //遍历Grid中的子项 foreach (var c in this.grid_box.Children) { Border bd = c as ...

  4. 【图论 思维】cf715B. Complete The Graph加强

    zzq讲的杂题 题目大意 有一张$n​$个点$m​$条边的简单正权无向图,$S​$到$T​$的最短路为$L​$,现在有一些边的边权未知,请输出任意一种满足题意的方案. $n,m\le 500000​$ ...

  5. 腾讯云负载均衡CLB

    负载均衡 使用场景: ①购买一个负载均衡LB实例 ②一级.二级域名都解析到VIP上 ③创建HTTP/HTTPS监听器 ④绑定云主机 在nginx中只需要配置好伪静态和相关设置就ok了

  6. httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例

    httpd配置内容 httpd2.2 配置文件: /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf 服务脚本: /etc/rc.d/init.d/ ...

  7. JSONArray.fromObject不执行且不报错问题的解决

    今天在写javaweb工程的时候需要向前台传json格式的数据,用到了json-lib-2.4-jdk15.jar等一系列包,然而却出现如下状况: CityBean是一个javaBean,我们看到,控 ...

  8. zookeeper集群(二)

    经过前一篇文章<zookeeper伪集群一>的阅读,相信大家对zookeeper集群已经有一定的了解了,接下来我们再谈谈zookeeper真集群.其实真集群和伪集群还是有很多相似的部分的, ...

  9. python学习之变量类型

    变量: 变量是保存在内存中的值,根据变量类型开辟不同的内存空间且只允许符合该数据类型的数据才可以被存储在该内存空间中 变量赋值: 在Python中定义变量时,无需像其他语言一样需要声明数据类型.每个变 ...

  10. git重新下载项目

    file-new-project from version control - git 修改网址为需要的网址