题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=4586
解题思路:
只考虑第一次,获得的金币的平均值为sum/n.sum为所有色子的面的金币值相加。
对于运气好,摇中了可以再来一次,该轮就能获得m/n*(sum/n)
运气好,又再来一次,该轮能获得(m/n)^2*(sum/n)
无穷无尽的摇下去,一共能获得sum/n*(1+p + p^2+`````+p^k + ````),其中p = m/n
将式子化简,就能得到E = sum/(n-m)。所以当sum = 0时为0,n=m时为inf。其余就为sum/(n-m)。
贴代码:
1 #include<cstdio> 2 int main() 3 { 4 // freopen("in.c","r",stdin); 5 int n,m,a; 6 while(~scanf("%d",&n)) 7 { 8 int sum =0; 9 for(int i=0; i<n; ++i) 10 { 11 scanf("%d",&a); 12 sum += a; 13 } 14 scanf("%d",&m); 15 for(int i=0; i<m; ++i) 16 scanf("%d",&a); 17 if(sum == 0) printf("0.00 "); 18 else if(n == m )printf("inf "); 19 else printf("%.2f ",(double)sum/(n-m)); 20 } 21 return 0; 22 }