Loading

P3802 小魔女帕琪 稍有难度的数学题

不过这点难度估计在数学奥赛面前不值一题。

链接

我们来分析一下,根据期望的线性性,总的期望触发次数就是每七个的触发次数,也就是说:\(1\)\(7\)\(2\)\(8\) 的触发次数等等,不难发现,\(1\)\(7\) 的期望次数为:

\[7!\times \frac{a_1}{N}\times \frac{a_2}{N-1}\times \frac{a_3}{N-2}\times \frac{a_4}{N-3}...\times \frac{a_7}{N-6} \]

我们现在考虑一下 \(2\)\(8\) 的期望次数是多少。不难发现,也是上面这个数。

我们即可考虑 \(3\)\(9\) 的期望次数是多少,经过一通计算,发现也是这个数。

通过归纳不难证明,所有的期望次数都是上面那个东西。

所以我们可以得到答案为:

\[7!\times\frac{a_1}{N}\times \frac{a_2}{N-1}\times \frac{a_3}{N-2}\times \frac{a_4}{N-3}...\times \frac{a_6}{N-5}\times a_7 \]

代码:

#include<iostream>
#include<cstdio>
#define dd double
#define ld long double
#define ll long long
#define uint unsigned int
#define ull unsigned long long
#define N number
#define M number
using namespace std;

const int INF=0x3f3f3f3f;

template<typename T> inline void read(T &x) {
    x=0; int f=1;
    char c=getchar();
    for(;!isdigit(c);c=getchar()) if(c == '-') f=-f;
    for(;isdigit(c);c=getchar()) x=x*10+c-'0';
    x*=f;
}

dd a[8],all,ans=1;

int main(){
    for(int i=1;i<=7;i++){
        scanf("%lf",&a[i]);
        all+=a[i];
    }
    for(int i=1;i<=6;i++){
        ans*=a[i];ans/=(all-i+1);
    }
    ans*=a[7];ans*=5040;
    printf("%0.3lf\n",ans);
    return 0;
}
posted @ 2021-07-11 20:51  hyl天梦  阅读(43)  评论(0编辑  收藏  举报