hdu4586 Play the Dice(概率期望)

题意:

有一个n面骰子,第i个面有值a(i),
而且其中有m个面有颜色。

现在投掷一次骰子,分数+=投到的面的值,
如果投到有颜色的面,那么可以再投一次,
求期望分数。

数据范围:n<=200,m<=n,0<=a(i)<=200,

解法:

n 个 格 子 , 有 颜 色 的 格 子 m 个 , 设 有 颜 色 的 格 子 权 值 和 为 x , 没 颜 色 的 权 值 和 为 y , 那 么 E = ( x m + E ) ∗ m n + y n − m ∗ n − m n 移 项 得 : E = x + y n − m = s u m { a [ i ] } n − m n个格子,有颜色的格子m个,\\ 设有颜色的格子权值和为x,没颜色的权值和为y,\\ 那么E=(\frac{x}{m}+E)*\frac{m}{n}+\frac{y}{n-m}*\frac{n-m}{n}\\ 移项得:\\ E=\frac{x+y}{n-m}=\frac{sum\{a[i]\}}{n-m} nmx,y,E=(mx+E)nm+nmynnm:E=nmx+y=nmsum{ a[i]}

code:

#include <bits/stdc++.h>
using namespace std;

signed main(){
    
    
    int n,m;
    while(scanf("%d",&n)!=EOF){
    
    
        double sum=0;
        for(int i=1;i<=n;i++){
    
    
            int x;scanf("%d",&x);
            sum+=x;
        }
        scanf("%d",&m);
        for(int i=1;i<=m;i++){
    
    
            int x;scanf("%d",&x);
        }
        //要先判sum==0,然后判m==n.
        if(sum==0){
    
    
            puts("0.00");
            continue;
        }
        if(m==n){
    
    
            puts("inf");
            continue;
        }
        //
        double ans=sum*1.0/(n-m);
        printf("%.2f\n",ans);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44178736/article/details/114008758