题目:
题意:
有 7 7 7种元素,每个元素最多释放 a i a_i ai次,求能放出所有元素的期望
分析:
我们先从一般情况入手,对前
7
7
7次释放能放出七重奏的期望进行分析
设
S
u
m
Sum
Sum为
∑
i
=
1
7
a
i
\sum_{i=1}^7a_i
∑i=17ai
那如果是按照
1
1
1再到
2
2
2再到
3
3
3一直升序到
7
7
7,则期望为
a
1
S
u
m
∗
a
2
S
u
m
−
1
∗
a
3
S
u
m
−
2
∗
…
…
∗
a
7
S
u
m
−
6
\frac{a_1}{Sum}*\frac{a_2}{Sum-1}*\frac{a_3}{Sum-2}*……*\frac{a_7}{Sum-6}
Suma1∗Sum−1a2∗Sum−2a3∗……∗Sum−6a7
但是如果我们不是按照这样的顺序呢
我们设
b
b
b序列为
a
a
a序列的复制,只是
b
i
b_i
bi可以表示
a
任
意
a_{任意}
a任意并且
b
b
b中的数不会重复
我们对上面的式子进行化简得到:
b
1
∗
b
2
∗
b
3
∗
…
…
∗
b
7
S
u
m
∗
(
S
u
m
−
1
)
∗
(
S
u
m
−
2
)
∗
(
S
u
m
−
3
)
…
…
\frac{b_1*b_2*b_3*……*b_7}{Sum*(Sum-1)*(Sum-2)*(Sum-3)……}
Sum∗(Sum−1)∗(Sum−2)∗(Sum−3)……b1∗b2∗b3∗……∗b7
这样我们就惊奇的发现:顺序并不会影响到我们前
7
7
7次的释放结果
所以我们前
7
7
7次释放不考虑顺序的期望为
7
!
∗
a
1
S
u
m
∗
a
2
S
u
m
−
1
∗
a
3
S
u
m
−
2
∗
…
…
∗
a
7
S
u
m
−
6
7!*\frac{a_1}{Sum}*\frac{a_2}{Sum-1}*\frac{a_3}{Sum-2}*……*\frac{a_7}{Sum-6}
7!∗Suma1∗Sum−1a2∗Sum−2a3∗……∗Sum−6a7
那么我们对原问题进行更深的分析
首先,我们思考下一个神奇的问题:假如有一天老师给了你们班一次和校花吃饭的机会,但只有一个人能享有如此机遇,所以老师拿了个箱子出来,里面有
1
1
1个红球,
29
29
29个白球(你们班一共有
30
30
30人)。那么对于先去抽的人和后去抽的人是公平的吗
当然是公平的啦
第一个的期望是
1
30
\frac{1}{30}
301,第二个的期望是
29
30
∗
1
29
\frac{29}{30}*\frac{1}{29}
3029∗291,第三个的期望是
29
30
∗
28
29
∗
1
28
…
…
\frac{29}{30}*\frac{28}{29}*\frac{1}{28}……
3029∗2928∗281……
所以顺序不会影响我们期望的结果,这也是我们一开始假设前
7
7
7次释放的魔法都不同合法的原因
再让我们回到对问题的分析上,我们第
8
8
8次释放的魔法一定是之前中的任意一个,所以用公式表达出来就是
a
i
−
1
S
u
m
−
7
\frac{ai-1}{Sum-7}
Sum−7ai−1
因为一共有
7
7
7种情况,所以表示出来为
∑
i
=
1
7
a
i
−
1
S
u
m
−
7
\sum_{i=1}^7\frac{ai-1}{Sum-7}
∑i=17Sum−7ai−1
如此一来,将求和式子化简后发现结果就等于
1
1
1,即对答案的贡献仍然是
7
!
∗
a
1
S
u
m
∗
a
2
S
u
m
−
1
∗
a
3
S
u
m
−
2
∗
…
…
∗
a
7
S
u
m
−
6
7!*\frac{a_1}{Sum}*\frac{a_2}{Sum-1}*\frac{a_3}{Sum-2}*……*\frac{a_7}{Sum-6}
7!∗Suma1∗Sum−1a2∗Sum−2a3∗……∗Sum−6a7
再往后面的位置,贡献都是如此,可自行证明
但是因为有最后的
6
6
6个位置不足
7
7
7个,所以我们最终的期望结果为
(
S
u
m
−
6
)
∗
7
!
∗
a
1
S
u
m
∗
a
2
S
u
m
−
1
∗
a
3
S
u
m
−
2
∗
…
…
∗
a
7
S
u
m
−
6
(Sum-6)*7!*\frac{a_1}{Sum}*\frac{a_2}{Sum-1}*\frac{a_3}{Sum-2}*……*\frac{a_7}{Sum-6}
(Sum−6)∗7!∗Suma1∗Sum−1a2∗Sum−2a3∗……∗Sum−6a7
即
7
!
∗
a
1
S
u
m
∗
a
2
S
u
m
−
1
∗
…
…
∗
a
6
S
u
m
−
5
∗
a
7
7!*\frac{a_1}{Sum}*\frac{a_2}{Sum-1}*……*\frac{a_6}{Sum-5}*a_7
7!∗Suma1∗Sum−1a2∗……∗Sum−5a6∗a7
代码:
// luogu-judger-enable-o2
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<queue>
#define LL long long
#define LZX ILU
using namespace std;
inline LL read() {
LL d=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
return d*f;
}
int a[10];
int main()
{
double ans=1.0;
int s=0;
for(int i=1;i<=7;i++) a[i]=read(),s+=a[i],ans*=(double)i;
for(int i=1;i<7;i++) ans*=(double)a[i]/(s-i+1);
printf("%.3lf",ans*a[7]);
return 0;
}