P3978 [TJOI2015]概率论
生活随笔
收集整理的這篇文章主要介紹了
P3978 [TJOI2015]概率论
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
\(\color{#0066ff}{ 題目描述 }\)
為了提高智商,ZJY開始學習概率論。有一天,她想到了這樣一個問題:對于一棵隨機生成的n個結點的有根二叉樹(所有互相不同構的形態等概率出現),它的葉子節點數的期望是多少呢?
判斷兩棵樹是否同構的偽代碼如下:
\(\color{#0066ff}{輸入格式}\)
輸入一個正整數n,表示有根樹的結點數
\(\color{#0066ff}{輸出格式}\)
輸出這棵樹期望的葉子節點數,要求誤差小于1e-9
\(\color{#0066ff}{輸入樣例}\)
13\(\color{#0066ff}{輸出樣例}\)
1.0000000001.200000000\(\color{#0066ff}{數據范圍與提示}\)
對于30%的數據,1 ≤ n ≤ 10
對于70%的數據,1 ≤ n ≤ 100
對于100%的數據,1 ≤ n ≤ \(10^9\)
\(\color{#0066ff}{ 題解 }\)
根據概率,顯然\(ans=\frac{\sum二叉樹葉子節點個數}{二叉樹個數}\)
n個點的二叉樹個數為\(Catalan(n)\)
考慮第n個點的位置(作為葉子節點),通過手胡,可以發現有n個位置可以作為葉子節點,于是方案為\(Catalan(n-1)\)
因此。。。\(ans=\frac{Catalan(n-1)*n}{Catalan(n)}\)
化簡一下就是\(\frac{n*(n+1)}{4*n-2}\)
#include<bits/stdc++.h> #define LL long long LL in() {char ch; LL x = 0, f = 1;while(!isdigit(ch = getchar()))(ch == '-') && (f = -f);for(x = ch ^ 48; isdigit(ch = getchar()); x = (x << 1) + (x << 3) + (ch ^ 48));return x * f; } double n; int main() {n = in();printf("%.10f", (double)((n) * (n + 1)) / (4.0 * n - 2));return 0;}轉載于:https://www.cnblogs.com/olinr/p/10278306.html
總結
以上是生活随笔為你收集整理的P3978 [TJOI2015]概率论的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue 给url 中文参数 添加编码解码
- 下一篇: 《重构》的读书笔记