1. 程式人生 > 其它 >P3802 小魔女帕琪 稍有難度的數學題

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;
}