zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    SDUT 猴子分桃
    SDUT 母牛的故事
    SDUT 小鑫の日常系列故事(六)——奇遇记 递推算法
    SDUT 爬楼梯
    SDUT 王小二切饼
    linux 排序命令sort
    shell 判断语句
    shell统计指定范围内的所有质数以及它们的和
    shell 1到指定数累加
    shell九九乘法表
  • 原文地址:https://www.cnblogs.com/LLTYYC/p/9590448.html
Copyright © 2011-2022 走看看