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

发表评论

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

你是机器人吗? =。= *