1 /** 2 大意:给定一个色子,有n个面,每一个面上有一个数字,在其中的m个面上有特殊的颜色,当掷出的色子出现这m个颜色之一时,可以再掷一次。。求其最后的期望 3 思路:假设 期望为ans 4 ans = 1/n*(a[b[1]]+ans)+1/n*(a[b[2]]+ans)+....+1/n*(a[b[m]]+ans) +...+1/n*(a[k]).... 5 ans = m/n*ans+1/n*(a[1]+a[2]+a[3]+...a[n]) 6 ans = m/n*ans+sum/n 7 ans = sum/(n-m) 8 若sum =0 ----〉ans =0; 9 若n-m=0-----〉ans = inf 10 否则 ans = sum/(n-m) 11 学习之处:进行简单的推导。。自己还是欠缺 12 **/ 13 #include <iostream> 14 #include <cstdio> 15 using namespace std; 16 double a,b; 17 double n,m; 18 int main() 19 { 20 while(scanf("%lf",&n)==1){ 21 double sum =0; 22 for(int i=0;i<n;i++){ 23 scanf("%lf",&a); 24 sum += a; 25 } 26 scanf("%lf",&m); 27 for(int i=0;i<m;i++) 28 scanf("%lf",&b); 29 if(sum==0){ 30 printf("0.00\n"); 31 continue; 32 } 33 if((n-m)==0){ 34 printf("inf\n"); 35 }else{ 36 printf("%.2lf\n",sum/(n-m)); 37 } 38 } 39 return 0; 40 }