1. 题目
2. 题解
设 $sum$为 $a_i$的和。
首先,如果没有 “再来一次”,那么期望得分为:
$sum\div n$
如果搞到了 $m$个特殊面中的一个,那么第二次掷筛子期望得分(不包括第一次的期望得分)为:
$sum\div n\times {(m/n)}$
以此类推:
第三次:
$sum\div n\times {(m/n)}^{2}$
第四次:
$sum\div n\times {(m/n)}^{3}$
第五次:
$sum\div n\times {(m/n)}^{4}$
…
所以答案为:
$sum\div n+sum\div n\times {(m/n)}+sum\div n\times {(m/n)}^{2}+sum\div n\times {(m/n)}^{3}…+sum\div n\times {(m/n)}^{\infty }$
也就等于:
$sum\div n\times (1+m\div n+(m\div n)^2+…+(m\div n)^{\infty })$
然后通过无穷递降等比数列求和公式可以得到:$1+m\div n+(m\div n)^2+…+(m\div n)^{\infty }=n/(n-m)$
所以答案为:
$sum\div n\times n\div {(n-m)}=sum\div {(n-m)}$
显然,当 $sum$为 0 时答案为 $0.00$,当 $n-m$为 0 时答案为 $inf$,否则答案为 $sum\div {(n-m)}$
代码:
#include <bits/stdc++.h>
using namespace std;
int n,m,sum;
int main()
{
while(sum=0,~scanf("%d",&n))
{
for(int i=1,a;i<=n;i++)scanf("%d",&a),sum+=a;
scanf("%d",&m);
for(int i=1,a;i<=m;i++)scanf("%d",&a);
if(!sum){printf("0.00\n");continue;}
if(n==m){printf("inf\n");continue;}
printf("%.2lf\n",(double)(sum/(double)(n-m)));
}
return 0;
}
0 条评论