【bzoj4001】[TJOI2015]概率论 生成函数+导数
题目描述

输入
输入一个正整数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]概率论 生成函数+导数的更多相关文章
- bzoj4001: [TJOI2015]概率论
题目链接 bzoj4001: [TJOI2015]概率论 题解 生成函数+求导 设\(g(n)\)表示有\(n\)个节点的二叉树的个数,\(g(0) = 1\) 设\(f(x)\)表示\(n\)个节点 ...
- 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). 类 ...
- 2018.12.31 bzoj4001: [TJOI2015]概率论(生成函数)
传送门 生成函数好题. 题意简述:求nnn个点的树的叶子数期望值. 思路: 考虑fnf_nfn表示nnn个节点的树的数量. 所以有递推式f0=1,fn=∑i=0n−1fifn−1−i(n>0) ...
- BZOJ4001 [TJOI2015]概率论 【生成函数】
题目链接 BZOJ4001 题解 Miskcoo 太神了,orz #include<algorithm> #include<iostream> #include<cstr ...
- BZOJ4001[TJOI2015]概率论——卡特兰数
题目描述 输入 输入一个正整数N,代表有根树的结点数 输出 输出这棵树期望的叶子节点数.要求误差小于1e-9 样例输入 1 样例输出 1.000000000 提示 1<=N<=10^9 设 ...
- BZOJ4001:[TJOI2015]概率论(卡特兰数,概率期望)
Description Input 输入一个正整数N,代表有根树的结点数 Output 输出这棵树期望的叶子节点数.要求误差小于1e-9 Sample Input 1 Sample Output 1. ...
- 【BZOJ4001】[TJOI2015]概率论(生成函数)
[BZOJ4001][TJOI2015]概率论(生成函数) 题面 BZOJ 洛谷 题解 这题好仙啊.... 设\(g_n\)表示\(n\)个点的二叉树个数,\(f_n\)表示\(n\)个点的二叉树的叶 ...
- 4001: [TJOI2015]概率论
4001: [TJOI2015]概率论 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 262 Solved: 108[Submit][Status] ...
- [TJOI2015]概率论
[TJOI2015]概率论 史上最短黑题 看起来一脸懵逼,没有取模,1e-9 根据期望定义,发现 分母是一个卡特兰数,,,,不能直接算 所以考虑怎么消掉一些东西 gn表示n个点的叶子个数和,fn表示n ...
随机推荐
- SpringBoot学习5:访问静态资源
springboot默认从项目的resources里面的static目录下或者webapp目录下访问静态资源 方式一:在resources下新建static文件(文件名必须是static) 在浏览器中 ...
- 开发SDK注意事项
1. 修改类别文件名及类别方法. 开发SDK时通常会用到比较多的第三方的类别方法, 这样的话, 开发者在使用你的SDK时, 因为他可能也会加一些第三方的开源库, 比如都使用了NSString的md5类 ...
- C/C++获取本机名+本机IP+本机MAC
本机名.IP.MAC都是一些比较常用网络参数,怎么用C/C++获取呢? 研究了两三个小时... 需要说明的都在代码注释里 #include <stdio.h> #include <W ...
- 【动态规划 floyd】SPOJ ACPC13
为什么rzz会把这题放在NOI模拟赛的T2? 题目大意 有一张$n$个点$m$条边的有向图,每条边有权值$w_i$. 定义一个任务$(a_i,b_i,c_i)$是如下一条路径: 最多经过$c_i$条边 ...
- 39条常见的Linux系统简单面试题
39条常见的Linux系统简单面试题 本文主要分享39条常见的Linux系统简单面试题,其中包括如何看当前Linux系统有几颗物理CPU和每颗CPU的核数.如何实时查看网卡流量为多少等等,希望对你有所 ...
- JAVA / MySql 编程——第五章 事务、视图、索引、备份和恢复
1.事务(Transaction): 事务是将一系列数据操作绑成一个整体进行统一管理. 如果一事务执行成功,则咋子该事务中进行的所有数据更改均会提交,称为数据库中的永久成部分. 如果事务执行是遇到错误 ...
- J.U.C 系列 Tools之Executors
上个章节说了Tools中的其他四个工具类,本节我们来看一看工具类中的老大Executors,为什么说它是老大,肯定是因为他的功能最多最强大. 一 Executors是什么 Executors 是一个线 ...
- springboot遇见问题总结
今天开始学习创建springboot项目 问题1: 产生异常: 创建项目目录: demo代码: 代码Controller import org.springframework.web.bind.ann ...
- python语言中threading.Thread类的使用方法
1. 编程语言里面的任务和线程是很重要的一个功能.在python里面,线程的创建有两种方式,其一使用Thread类创建 # 导入Python标准库中的Thread模块 from threading i ...
- myeclipse用maven搭建web项目后tomcat启动报找不到jar包解决办法
因为maven项目jar包放在Maven Dependencies内,用tomcat启动web项目,会找WEB-INF下的lib目录,需要部署Maven Dependencies 选中项目-prope ...