题意:
有一个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} n个格子,有颜色的格子m个,设有颜色的格子权值和为x,没颜色的权值和为y,那么E=(mx+E)∗nm+n−my∗nn−m移项得:E=n−mx+y=n−msum{ 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;
}