zl程序教程

您现在的位置是:首页 >  其它

当前栏目

【luogu U138098】超级蚯蚓(数学概率)

数学 超级 Luogu 概率
2023-09-27 14:28:28 时间

超级蚯蚓

题目链接:luogu U138098

题目大意

给你 n 个线段,你每次会随机选两个线段头合起来,问你和 n 次之后恰好变成一个大环的概率。

思路

我们考虑每成功的合成一次,线段的数量就会少 1 1 1

那合成 n − 1 n-1 n1 次(成功)之后,就变成只有一个线段,那只有两个头,无论怎么和都是成功的。

然后我们考虑求成功合成每一步的概率。
要把 i i i 个线段合成成 i − 1 i-1 i1 个,那有 2 i 2i 2i 个头可以选,我们考虑一下怎样选是不可以的。
那就是选一条线段的两个头,那这个线段就提前变成了环,这样的情况有 i i i 种,而所有的概率是 C 2 i 2 C_{2i}^2 C2i2,即 2 i ( 2 i − 1 ) 2 \dfrac{2i(2i-1)}{2} 22i(2i1)
减一下,成功的概率就是 2 i ( 2 i − 1 ) 2 − i 2 i ( 2 i − 1 ) 2 \dfrac{\frac{2i(2i-1)}{2}-i}{\frac{2i(2i-1)}{2}} 22i(2i1)22i(2i1)i

当然你也可以化简:
= 2 i ( 2 i − 1 ) − 2 i 2 2 i ( 2 i − 1 ) 2 =\dfrac{\frac{2i(2i-1)-2i}{2}}{\frac{2i(2i-1)}{2}} =22i(2i1)22i(2i1)2i
= 2 i ( 2 i − 1 ) − 2 i 2 i ( 2 i − 1 ) =\dfrac{2i(2i-1)-2i}{2i(2i-1)} =2i(2i1)2i(2i1)2i
= 2 i ( 2 i − 2 ) 2 i ( 2 i − 1 ) =\dfrac{2i(2i-2)}{2i(2i-1)} =2i(2i1)2i(2i2)
= 2 i − 2 2 i − 1 =\dfrac{2i-2}{2i-1} =2i12i2

但其实化简不化简都无所谓。

然后你要每一步都成功,那就是每步成功的概率乘在一起就是答案了。

代码

#include<cstdio>
#define ll long long

using namespace std;

int n;
double f[1001];

int main() {
	scanf("%d", &n);
	
	f[1] = 1;
	for (int i = 2; i <= n; i++) {
		int di = (2 * i) * (2 * i - 1) / 2;
		f[i] = 1.0 * (di - i) / di;
	}
	
	for (int i = 2; i <= n; i++)
		f[i] *= f[i - 1];
	
	printf("%.6lf", f[n]);
	
	return 0;
}