1. 程式人生 > >小魔女帕琪

小魔女帕琪

display 條件概率 gist 一個 概率問題 數學歸納 reg line scanf

小魔女帕琪

\(a_1,a_2,...,a_7\)個對應的\(1,2,...,7\)進行排列,詢問其中出現\(1,2,...,7\)的全排列的個數的期望,a1+a2+a3+a4+a5+a6+a7<=10^9。

顯然數據範圍不支持遞推方程,於是猜測為條件概率問題,即前後概率發生有聯系,通常相等,於是設其中一個狀態,不妨設在第n個位置到最後一個位置,出現了一次1234567的全排列期望,為(設此時有12..7,\(a_1,...,a_7\)個,其和為n)

\[\frac{7!\prod_{i=1}^7a_i}{\prod_{i=1}^7(n-i+1)}\]

在考慮n+1個位置出現全排列的期望,不難得知有

\[\frac{7!(a_1-1)\prod_{i=1}^7a_i}{\prod_{i=1}^7(n-i+1)}\]
\[\frac{7!(a_2-1)\prod_{i=1}^7a_i}{\prod_{i=1}^7(n-i+1)}\]
\[....\]

累加我們有

\[\frac{7!(a_1-1+a_2-1+...+a_7-1)\prod_{i=1}^7a_i}{\prod_{i=1}^7(n-i+1)}=\]

\[\frac{7!\prod_{i=1}^7a_i}{\prod_{i=1}^7(n-i+1)}\]

於是我們得知任何一個位置到終點的期望與下一個位置到終點的期望都相同,根據數學歸納法,當然遞歸更好理解,於是我們得知任何一個地方出現全排列概率都是相同的。

於是

\[ans=\frac{7!\prod_{i=1}^7a_i}{\prod_{i=1}^7(n-i+1)}(n-7+1)=\]

\[\frac{7!\prod_{i=1}^7a_i}{\prod_{i=1}^6(n-i+1)}\]

代入式子計算即可。

參考代碼:

#include <iostream>
#include <cstdio>
#define il inline
#define ri register
using namespace std;
double a[7];
int main(){
    ri int i,n(0);double ans(1);
    for(i=0;i<7;++i)
        scanf("%lf",&a[i]),n+=a[i];
    for(i=0;i<6;++i)
        ans*=a[i],ans*=(i+1),ans/=(n-i);
    ans*=a[i],ans*=(i+1);
    printf("%.3lf",ans);
    return 0;
}

小魔女帕琪