题目大意:给你一发骰子,有n个面,掷骰子到第i个面时得到ai的钱,有时某些面bi,还可以让你再掷一次骰子,问最后可以获得的钱期望是多少?
设ans为当前得到的钱的期望
则只掷一次,期望是sum=∑ai(1<=i<=n)/n;
有m/n的机会可以再来一次,m/n*sum;
又赶上m/n的机会,(m/n)^2*sum;
所以ans=sum*(1+m/n+…+(m/n)^k+…)
由无穷等比数列可知ans=sum*(1-m/n)=∑ai(1<=i<=n)/(n-m);
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1000+10;
int a[maxn],b[maxn],n,m;
int main(){
while(~scanf("%d",&n)){
int sum=0;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
sum+=a[i];
}
scanf("%d",&m);
for(int i=0;i<m;i++)
scanf("%d",&b[i]);
if(sum==0){
printf("0.00\n");
continue;
}
if(n==m){
printf("inf\n");
continue;
}
printf("%.2lf\n",1.0*sum/(n-m));
}
return 0;
}