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;
}
分类: 文章

XZYQvQ

炒鸡辣鸡的制杖蒟蒻一枚QvQ

0 条评论

发表回复

Avatar placeholder

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