1. 程式人生 > >「51Nod1639」綁鞋帶(概率

「51Nod1639」綁鞋帶(概率

group 包含 sta anti cor 兩個 radi 想象 src

1639 綁鞋帶 技術分享圖片 基準時間限制:1 秒 空間限制:131072 KB 分值: 20 難度:3級算法題 技術分享圖片 收藏 技術分享圖片 關註 有n根鞋帶混在一起,現在重復n次以下操作:隨機抽出兩個鞋帶頭,把它們綁在一起。可以想象,這n次之後將不再有單獨的鞋帶頭,n條鞋帶系成了一些環。那麽有多大概率剛好所有這些鞋帶只形成了一個環? Input
僅一行,包含一個整數n  (2<=n<=1000)。
Output
輸出一行,為剛好成環的概率。
Input示例
2
Output示例
0.666667

題解

考慮當前已經打了$i$個結,

那麽當前還有$2*n-2*i$個鞋帶頭,

其中你捏住了一個,還剩$2*n-2*i-1$個鞋帶頭,

這其中只有一個(跟你捏住的在同一根繩上的)鞋帶頭是不可以打結的,

所以這一步能打一個符合要求的結的概率為$\frac{2*n-2*i-2}{2*n-2*i-1}$.

$i$從$0$循環到$n-2$,當打了$n-1$個結時停下.(因為$n-1$個結時已經成一條鏈了).

答案就是累乘的結果.

 1 /*
 2 C++
 3 15 ms
 4 2108 KB
 5 Accepted
 6 2018/10/26
 7 17:01:37
 8 */
 9 #include<iostream>
10 #include<cstdio>
11
using namespace std; 12 int main() 13 { 14 //freopen("a.in","r",stdin); 15 int n; 16 scanf("%d",&n); 17 double ans=1; 18 for(int i=0;i<n-1;++i) 19 { 20 ans*=(double)(2*n-(2*i)-2)/(2*n-(2*i)-1); 21 } 22 cout<<ans; 23 return 0; 24 }

「51Nod1639」綁鞋帶(概率