对于网上那么多什么等比数列求和什么无穷级数的做法我只能说:我是不是做错了。不过我发现我 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 条评论