P3978 [TJOI2015]概率论

P3978 [TJOI2015]概率论

题目描述

Solution

C n C_n Cn表示 n n n个节点的树的个数(卡特兰数), S n S_n Sn表示 n n n个节点的所有树的叶子的个数和。
C n = ∑ i = 0 n − 1 C i C n − i − 1 + [ n = = 0 ] S n = 2 ∑ i = 0 n − 1 S i C n − i − 1 + [ n = = 1 ] C_n=\sum_{i=0}^{n-1} C_iC_{n-i-1}+[n==0]\\ S_n=2\sum_{i=0}^{n-1} S_iC_{n-i-1}+[n==1] Cn=i=0n1CiCni1+[n==0]Sn=2i=0n1SiCni1+[n==1]
写出 C n C_n Cn S n S_n Sn的生成函数:
C ( z ) = z ∑ n , i C i z i C n − i − 1 z n − i − 1 S ( z ) = 2 z ∑ n , i S i z i C n − i − 1 z n − i − 1 + z C(z)=z\sum_{n,i}^{}C_iz^iC_{n-i-1}z^{n-i-1}\\ S(z)=2z\sum_{n,i}^{}S_iz^iC_{n-i-1}z^{n-i-1}+z C(z)=zn,iCiziCni1zni1S(z)=2zn,iSiziCni1zni1+z
因此:

C ( z ) = z C ( z ) C ( z ) + 1 S ( z ) = 2 z S ( z ) C ( z ) + z C(z)=zC(z)C(z)+1\\ S(z)=2zS(z)C(z)+z C(z)=zC(z)C(z)+1S(z)=2zS(z)C(z)+z

C ( z ) C(z) C(z)当做一个未知数,解出一元二次方程的解 C ( z ) C(z) C(z)
C ( z ) = 1 − 1 − 4 z 2 z C(z)=\frac{1-\sqrt{1-4z}}{2z}\\ C(z)=2z114z

继续推出 S ( z ) S(z) S(z)的表达式:
( 1 − 2 z C ( z ) ) S ( z ) = z S ( z ) = z 1 − 2 z C ( z ) S ( z ) = z 1 − 2 z 1 − 1 − 4 z 2 z S ( z ) = z 1 − 4 z (1-2zC(z))S(z)=z\\ S(z)=\frac{z}{1-2zC(z)}\\ S(z)=\frac{z}{1-2z\frac{1-\sqrt{1-4z}}{2z}}\\ S(z)=\frac{z}{\sqrt{1-4z}} (12zC(z))S(z)=zS(z)=12zC(z)zS(z)=12z2z114z zS(z)=14z z
因此我们想要知道的就是 [ z n ] S ( z ) [z^n]S(z) [zn]S(z),也就是 S ( z ) S(z) S(z) z n z^n zn的系数。
有:
S ( z ) = z ( 1 − 4 z ) − 1 2 S ( z ) = z ∑ n > = 0 ( − 1 2 n ) ( − 4 z ) n S ( z ) = ∑ n > = 1 ( − 1 2 n − 1 ) ( − 4 ) n − 1 z n S(z)=z(1-4z)^{-\frac{1}{2}}\\ S(z)=z\sum_{n>=0}\tbinom{-\frac{1}{2}}{n}(-4z)^n\\ S(z)=\sum_{n>=1}\tbinom{-\frac{1}{2}}{n-1}(-4)^{n-1}z^n S(z)=z(14z)21S(z)=zn>=0(n21)(4z)nS(z)=n>=1(n121)(4)n1zn
其中
∑ n > = 0 ( − 1 2 n ) ( − 4 ) n = ( 2 n n ) \sum_{n>=0}\tbinom{-\frac{1}{2}}{n}(-4)^{n}=\tbinom{2n}{n} n>=0(n21)(4)n=(n2n)

因此
S ( z ) = ( 2 n − 2 n − 1 ) z n S(z)=\tbinom{2n-2}{n-1}z^n\\ S(z)=(n12n2)zn
[ z n ] S ( z ) = ( 2 n − 2 n − 1 ) [z^n]S(z)=\tbinom{2n-2}{n-1} [zn]S(z)=(n12n2)
答案就是
A n s = ( 2 n − 2 n − 1 ) C n = ( 2 n − 2 n − 1 ) ( n + 1 ) ( 2 n n ) = n ( n + 1 ) 2 ( 2 n − 1 ) Ans =\frac{\tbinom{2n-2}{n-1}}{C_n} =\frac{\tbinom{2n-2}{n-1}(n+1)}{\tbinom{2n}{n}}=\frac{n(n+1)}{2(2n-1)} Ans=Cn(n12n2)=(n2n)(n12n2)(n+1)=2(2n1)n(n+1)

时间复杂度 O ( 你 想 咋 地 就 咋 地 ) O(你想咋地就咋地) O(),可能会有点卡精度。

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <ctime>
#include <cassert>
#include <string.h>
//#include <unordered_set>
//#include <unordered_map>
//#include <bits/stdc++.h>

#define MP(A,B) make_pair(A,B)
#define PB(A) push_back(A)
#define SIZE(A) ((int)A.size())
#define LEN(A) ((int)A.length())
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define fi first
#define se second

using namespace std;

template<typename T>inline bool upmin(T &x,T y) { return y<x?x=y,1:0; }
template<typename T>inline bool upmax(T &x,T y) { return x<y?x=y,1:0; }

typedef long long ll;
typedef unsigned long long ull;
typedef long double lod;
typedef pair<int,int> PR;
typedef vector<int> VI;

const lod eps=1e-11;
const lod pi=acos(-1);
const int oo=1<<30;
const ll loo=1ll<<62;
const int mods=10007;
const int inv6=(mods+1)/6;
const int MAXN=600005;
const int INF=0x3f3f3f3f;//1061109567
/*--------------------------------------------------------------------*/
inline int read()
{
	int f=1,x=0; char c=getchar();
	while (c<'0'||c>'9') { if (c=='-') f=-1; c=getchar(); }
	while (c>='0'&&c<='9') { x=((x<<3)+(x<<1)+(c^48))%mods; c=getchar(); }
	return x*f;
}
int main()
{
	lod n;
	scanf("%Lf",&n);
	printf("%.12Lf\n",n/(n*2-1)*(n+1)/2);
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值