对于网上那么多什么等比数列求和什么无穷级数的做法我只能说:我是不是做错了。不过我发现我 AC 了。

题意:有个 n 面的色子,每一面有个数字,投一次,加上正面的数字,如果正面为红色,那么再投一次,以此类推。

思路:运用公式

\begin{equation}
E=\sum{E(x_i)P(x_i)}
\end{equation}
(E 为总体期望,$E(x_i)$为子事件 $x_i$的期望(题目中为得分),$P(x_i)$为 $x_i$事件的概率)

由于事件 “再投一次” 包含在事件 “投一次” 中,所以我们可以直接得出:

\begin{equation}
E=\sum{\frac{E(x_i)}{n}}+\frac{m}{n}E
\end{equation}

变形得:

\begin{equation}
E=\frac{\sum{E(x_i)}}{n-m}
\end{equation}

?? 是不是有什么问题,但是公式和那些无穷级数推出来的是一样得。看来还得想想。

#include <iostream>
#include <cstdio>
#include <cstring>

#define MX 210

using namespace std;

double n,mu,m,sgm;
int dice[MX];
int replay[MX];

int main()
{
    double ta;
    int tb;
    while(cin>>n)
    {
        sgm=0,mu=0;
        memset(replay,0,sizeof(replay));
        for(int i=1;i<=n;i++)scanf("%lf",&ta),sgm+=ta;
        cin>>m;
        for(int i=1;i<=m;i++)       //为了防止数据重复,判重
        {
            scanf("%d",&tb);
            if(replay[tb]==0)replay[tb]=1,mu+=1;
        }
        if(sgm!=0&&mu==n)cout<<"inf"<<endl;
        else if(sgm==0&&mu==n)printf("%.2f\n",0.00);
        else printf("%.2f\n",sgm/(n-mu));
    }
    return 0;
}

分类: 文章

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注