2018.12.31 bzoj4001: [TJOI2015]概率论(生成函数)
传送门
生成函数好题。
题意简述:求nnn个点的树的叶子数期望值。
思路:
考虑fnf_nfn表示nnn个节点的树的数量。
所以有递推式f0=1,fn=∑i=0n−1fifn−1−i(n>0)f_0=1,f_n=\sum_{i=0}^{n-1}f_if_{n-1-i}(n>0)f0=1,fn=∑i=0n−1fifn−1−i(n>0)
正是一个卷积的形式。
那么fnf_nfn的生成函数F(x)=xF2(x)+1F(x)=xF^2(x)+1F(x)=xF2(x)+1 注意要填上f0f_0f0
同理,考虑gng_ngn表示nnn个节点的树的叶子数总数。
有递推式g0=0,g1=1,gn=2∑i=0n−1fign−i−1(n>1)g_0=0,g_1=1,g_n=2\sum_{i=0}^{n-1}f_ig_{n-i-1}(n>1)g0=0,g1=1,gn=2∑i=0n−1fign−i−1(n>1)
所以gng_ngn的生成函数G(x)=2xF(x)G(x)+xG(x)=2xF(x)G(x)+xG(x)=2xF(x)G(x)+x 注意要填上g1g_1g1
然后F(x)=xF2(x)+1F(x)=xF^2(x)+1F(x)=xF2(x)+1
<=>xF2(x)−F(x)+1=0xF^2(x)-F(x)+1=0xF2(x)−F(x)+1=0
<=>F(x)=1−1−4x2xF(x)=\frac{1-\sqrt{1-4x}}{2x}F(x)=2x1−1−4x 不取1+1−4x2x\frac{1+\sqrt{1-4x}}{2x}2x1+1−4x是因为它不能向0收敛
G(x)=x1−2xF(x)=x1−4xG(x)=\frac x{1-2xF(x)}=\frac x{\sqrt{1-4x}}G(x)=1−2xF(x)x=1−4xx
然后我们对xF(x)xF(x)xF(x)求导:(xF(x))′=11−4x=G(x)x(xF(x))'=\frac1{\sqrt{1-4x}}=\frac{G(x)}x(xF(x))′=1−4x1=xG(x)
而对于xF(x)xF(x)xF(x)第nnn项fnxn+1f_nx^{n+1}fnxn+1求导之后会变成fn(n+1)xnf_n(n+1)x^nfn(n+1)xn等式右边:gn+1xn+1x=gn+1xn\frac{g_{n+1}x^{n+1}}x=g_{n+1}x^nxgn+1xn+1=gn+1xn,那么gn+1=fn(n+1)g_{n+1}=f_n(n+1)gn+1=fn(n+1)
我们令答案的函数是A(x)=∑i=0∞pnxnA(x)=\sum_{i=0}^{\infty}p_nx^nA(x)=∑i=0∞pnxn
那么gn=fn−1n=pnfn=>pn=fn−1nfng_n=f_{n-1}n=p_nf_n=>p_n=\frac{f_{n-1}}{nf_n}gn=fn−1n=pnfn=>pn=nfnfn−1
仔细观察会发现fnf_nfn是卡特兰数,然后带入就做完了。
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
double n;
return scanf("%lf",&n),printf("%.9lf",n*(n+1)/(4*n-2)),0;
}
2018.12.31 bzoj4001: [TJOI2015]概率论(生成函数)的更多相关文章
- 2018.12.31 bzoj3771: Triple(生成函数+fft+容斥原理)
传送门 生成函数经典题. 题意简述:给出nnn个数,可以从中选1/2/31/2/31/2/3个,问所有可能的和对应的方案数. 思路: 令A(x),B(x),C(x)A(x),B(x),C(x)A(x) ...
- 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 bzoj3992: [SDOI2015]序列统计(生成函数+ntt+快速幂)
传送门 生成函数简单题. 题意:给出一个集合A={a1,a2,...as}A=\{a_1,a_2,...a_s\}A={a1,a2,...as},所有数都在[0,m−1][0,m-1][0,m− ...
- 【bzoj4001】[TJOI2015]概率论 生成函数+导数
题目描述 输入 输入一个正整数N,代表有根树的结点数 输出 输出这棵树期望的叶子节点数.要求误差小于1e-9 样例输入 1 样例输出 1.000000000 题解 生成函数+导数 先考虑节点个数为$n ...
- BZOJ4001 [TJOI2015]概率论 【生成函数】
题目链接 BZOJ4001 题解 Miskcoo 太神了,orz #include<algorithm> #include<iostream> #include<cstr ...
- 2018.12.31 NOIP训练 偶数个5(简单数论)
传送门 对于出题人zxyoizxyoizxyoi先%\%%为敬题目需要龟速乘差评. 题意简述:5e55e55e5组数据,给出n,请你求出所有n位数中有偶数个5的有多少,n≤1e18n\le1e18n≤ ...
- 2018.12.30 bzoj3028: 食物(生成函数)
传送门 生成函数模板题. 我们直接把每种食物的生成函数列出来: 承德汉堡:1+x2+x4+...=11−x21+x^2+x^4+...=\frac 1{1-x^2}1+x2+x4+...=1−x21 ...
- 2018.12.30 poj3734 Blocks(生成函数)
传送门 生成函数入门题. 按照题意构造函数: 对于限定必须是出现偶数次的颜色:1+x22!+x44!+...=ex+e−x21+\frac {x^2}{2!}+\frac {x^4}{4!}+...= ...
随机推荐
- 使用phpStudyy运行tipask
tipask官网:https://www.tipask.com/tipask源码下载:https://www.tipask.com/download.html 可参考此处安装文档的链接 除此之外可以参 ...
- Python+Selenium学习--鼠标事件
场景 前景讲解了鼠标的click()事件,而我们在实际的web产品测试中,有关鼠标的操作,不仅仅只有单击,有时候还包括右击,双击,拖动等操作,这些操作包含在ActionChains类中. Action ...
- CTF题-http://120.24.86.145:8002/flagphp/:Bugku----flag.php
今天做了一道关于序列化的题目,收益颇多,愉快地开始. 首先,提示了“hint”,所以尝试加入hint参数.这儿没啥好说的,最后hint=1显示了重点内容.如下图所示 没错,是金灿灿的网页代码,开心,仔 ...
- struct和union,enum分析
空结构体占用的内存多大? struct d { }; int main() { struct d d1; struct d d2; printf("%d,%0x\n",sizeof ...
- 并行网络爬虫(C++实现)
step1 使用socket编程技术,利用http协议,抽取网页中的url,实现简单的爬虫. socket int socket (int domain, int type, int protocol ...
- Java后端工程师的学习技术栈
https://loveincode.cnblogs.com/
- mvc下添加 EntityFramework的引用
首先 打开工具-扩展和更新-联机-Visual Studio库,找到NuGet Package Manager 检查是否 安装,如果没有安装 先安装插件 安装成功后,右键点击‘引用’,如下图 然后 ...
- Activity 的启动过程深入学习
手机应用也是一个app,每一个应用的icon都罗列在Launcher上,点击icon触发onItemClick事件. 我们要启动「淘宝」这个App,首先我们要在清单文件定义默认启动的Activity信 ...
- ERROR: APK path is not specified for
1. 打开project structure 2.设置outpath路径 最好为绝对路径 点击确定 重新编译即可. Note: Android Studio版本使用
- sqlserver的数据库状态——脱机与联机
1.数据库状态: online:可以对数据库进行访问 offline:数据库无法访问 2.查看数据库状态的方法: (1)使用查询语句: SELECT state_desc FROM SYS.datab ...