P3802 小魔女帕琪
考虑前面7个魔法
如果前面七个魔法各不相同,那么就能完成一次帕琪七重奏
设 A=a1*a2*...*a7,S=a1+a2+...+a7,B=S*(S-1)*...*(S-6)
对于不同的施法顺序,前面七个魔法各不相同的概率总是:A/B
不同的顺序如: a1,a3,a2,a4,a5,a6,a7 和 a1,a2,a3,a4,a5,a6,a7 是不同的施法顺序
它们的概率分别为:(a1 / S) * (a3 / (S-1)) * (a2 / (S-2)) * (a4 / (S-3)) * (a5 / (S-4)) * (a6 / (S-5)) * (a7 / (S-6))
: (a1 / S) * (a2 / (S-1)) * (a3 / (S-2)) * ... * (a7 / (S-6))
稍微整理一下就是(a1*a2*...*a7)/(S*(S-1)*...*(S-6)) = A/B
所以就算施法顺序不同,但是概率总是一样的
不同的施法顺序总共有 7! 种
所以对于前面七个魔法的所有顺序,触发一次帕琪七重奏的概率就是 7! * (A/B)
考虑第 2~8 个魔法
如果第 1 个魔法为 a1 ,第 2~8 个魔法能再次触发帕琪七重奏总概率为
((a1-1)*a2*a3...*a7)/((S-1)*(S-2)*...*(S-7))
化简得 (A/a1*(a1-1))/(B/S*(S-7))
如果第一个魔法为 a2
那么第 2~8 个魔法能再次触发帕琪七重奏总概率同样可化简得
(A/a2*(a2-1))/(B/S*(S-7))
...
...
...
一直到 (a7-1)/(S-7),总概率同样化简得 (A/a7*(a7-1))/(B/S*(S-7))
那么把7种情况的概率加起来:(A/a1*(a1-1)+A/a2*(a2-1)+...+A/a7*(a7-1))/(B/S*(S-7))
把A和B提取出来并化简得(最好自己在纸上写一下):
(A/B)*((a1-1+a1-1+...+a7-1)*S/(a1*a2*...*a7)/(S-7)) = (A/B)*((S-7)*S/S/(S-7)) = (A/B)*1 !!
所以第 2~8 个魔法能触发帕琪七重奏的概率就是 7! * A/B(因为第 2~8 个魔法也有 7! 种组合)
同理第 3~9 个魔法能触发帕琪七重奏的概率也一样(可以用同样的方法,自己在纸上写一下,就不一一列举了)
所以总期望就是 7! * A/B * (S-6) (乘上S-6 是因为期望要从第 1~7 个魔法算到第 (S-6)~S 个魔法,一共算了 S-6 次)
所以代码量为 0
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; double a[8],s,ans=1; int main() { for(int i=1;i<=7;i++) cin>>a[i],s+=a[i]; for(int i=1;i<7;i++) ans=ans*a[i]/(s+1-i)*double(i); printf("%.3lf",ans*a[7]*7.0); return 0; }