题解 P3802 【小魔女帕琪】

· · 题解

这东西在任务计划里躺了三个月了。

来点严谨的!

看到期望题先别方,大胆推一波柿子先

在前7次就触发一个"七重奏"的概率不算难求。

想象一个七元排列\{p_1,p_2,p_3,p_4,p_5,p_6,p_7\}

指第p_1次触发魔法1,p_2次触发魔法2,等等。

显然,p的具体值并不影响事件的期望。

假定排列为\{1,2,3,4,5,6,7\}好了(草率)

N=a_1+a_2+a_3+a_4+a_5+a_6+a_7

这个东西成立的概率是\large{a_1/N*a_2/(N-1)*a_3/(N-2)...a_7/(N-6)}

因为在取魔法1的时候有\large{a_1/N}的概率,在此条件下取魔法2又有\large{a_2/(N-1)}(N减少了1)

当然七元排列有7!个。

所以在第7次就触发一个"七重奏"的概率是\large{7!*a_1/N*a_2/(N-1)*a_3/(N-2)...a_7/(N-6)}

接下来考虑在第8次触发一个"七重奏"的概率。

首先要知道,魔法发动互不影响。

相当于你在胡乱用掉一个晶体后重头再来。

也就是(a_1/N)(7!*(a_1-1)/(N-1)*a_2/(N-2)*a_3/(N-3)...a_7/(N-7))+

(a_2/N)(7!*a_1/(N-1)*(a_2-1)/(N-2)*a_3/(N-3)...a_7/(N-7))+ …… (a_7/N)(7!*a_1/(N-1)*a_2/(N-2)*a_3/(N-3)...(a_7-1)/(N-7))+

∏a_i=R

也就是

=7!/N/(N-1)/(N-2)/.../(N-7)*((a_1-1)R+(a_2-1)R+...+(a_7-1)R) =7!/N/(N-1)/(N-2)/.../(N-7)*(N-7)R =7!/N/(N-1)/(N-2)/.../(N-6)*R =7!*a_1/N*a_2/(N-1)*a_3/(N-2)...a_7/(N-6)

也就是“在第8次触发一个七重奏的概率”与“所以在第7次就触发一个七重奏的概率”相等。

同理“在第任意次触发一个七重奏的概率”与“所以在第7次就触发一个七重奏的概率”相等

这就好办了,直接(N-6)*7!*a_1/N*a_2/(N-1)*a_3/(N-2)...a_7/(N-6)

最后注意卡精度。

Code:

#include<cstdio>
using namespace std;
double a[10],N,ans=1;
int main()
{
  for(int i=1;i<=7;i++){
    scanf("%lf",&a[i]);
    N+=a[i];
  }if (N<7){
   printf("0.000");
    return 0;
  }for(int i=1;i<=7;i++)
    ans=ans*a[i]/(N-i+1);
  printf("%.3lf\n",ans*1*2*3*4*5*6*7*(N-6));
  return 0;
}