bzoj4001 [TJOI2015]概率论(生成函数)

我以为我不会忘记的qaq
还是写一写推导吧qaq,方便后人
首先设hn表示n个节点的二叉树的形态数
那么我们有 hn=i=1n1hihn1i,h0=1,h1=1 h n = ∑ i = 1 n − 1 h i ∗ h n − 1 − i , h 0 = 1 , h 1 = 1
写出 hn h n 的生成函数: f(x)=1+x+2x2+5x3+... f ( x ) = 1 + x + 2 x 2 + 5 x 3 + . . .
f2(x)=1+2x+5x2+... f 2 ( x ) = 1 + 2 x + 5 x 2 + . . .
f2(x)=f(x)1x f 2 ( x ) = f ( x ) − 1 x
解方程得 f(x)=1±14x2x f ( x ) = 1 ± 1 − 4 x 2 x
由于收敛性我们去掉一个根,得到
f(x)=114x2x f ( x ) = 1 − 1 − 4 x 2 x
用广义二项式定理展开,可以得到 xn x n 的系数为 Cn2nn+1 C 2 n n n + 1 ,也就是卡特兰数。
设sn表示n个节点的二叉树的叶子数
那么我们有 sn=i=1n1sihn1i,s0=0,s1=1 s n = ∑ i = 1 n − 1 s i ∗ h n − 1 − i , s 0 = 0 , s 1 = 1
写出 sn s n 的生成函数: g(x)=0+x+2x2+6x3+10x4... g ( x ) = 0 + x + 2 x 2 + 6 x 3 + 10 x 4 . . .
f(x)g(x)=x+3x2+5x3+... f ( x ) ∗ g ( x ) = x + 3 x 2 + 5 x 3 + . . .
f(x)g(x)=g(x)x2x f ( x ) ∗ g ( x ) = g ( x ) − x 2 x
f(x) f ( x ) 带入,得到 g(x)=x14x g ( x ) = x 1 − 4 x
同样用二项式展开可以得到 xn x n 的系数为 Cn12n2 C 2 n − 2 n − 1
因此答案就是 snhn=n(n+1)4n+2 s n h n = n ( n + 1 ) 4 n + 2

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 500010
inline char gc(){
    static char buf[1<<16],*S,*T;
    if(S==T){T=(S=buf)+fread(buf,1,1<<16,stdin);if(T==S) return EOF;}
    return *S++;
}
inline int read(){
    int x=0,f=1;char ch=gc();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=gc();}
    while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=gc();
    return x*f;
}
int n;
int main(){
//  freopen("a.in","r",stdin);
    n=read();
    printf("%.9lf\n",n*1.0*(n+1)/((ll)4*n-2));
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值