点击这里查看原题
f[i][j]表示玩i局赢j局的概率,则f[i][j]=f[i-1][j] * (1-p)+f[i-1][j-1] * p,于是对于每天而言,失败的概率q为f[n][i] (0<=i<=a*n/b)。
可以得到,第一天失败的概率为q,第二天失败的概率为(1-q) * q,第三天失败的概率为(1-q)^2 * q……
因此,总的期望ex=q * 1+ (1-q) * q * 2+(1-q)^2 * q * 3+……
令s=ex/q=1+(1-q) * 2+(1-q) ^2 * 3+……
(1-q)s=(1-q)+(1-q)^2 * 2+(1-q)^3 * 3+……
s-(1-q)s=1+(1-q)+(1-q)^2……
qs=ex=1+(1-q)+(1-q)^2……
是一个等比数列,项数趋于正无穷时,总和为a1/(1-q),因此,ex=1/q
/*
User:Small
Language:C++
Problem No.:11427
*/
#include<bits/stdc++.h>
#define ll long long
#define inf 999999999
using namespace std;
int a,b,n;
double q,f[105][105],p;
void solve(){
scanf("%d/%d%d",&a,&b,&n);
p=1.0*a/b;
memset(f,0,sizeof(f));
f[0][0]=1;
f[0][1]=0;
for(int i=1;i<=n;i++){
for(int j=0;b*j<=a*i;j++){
f[i][j]=f[i-1][j]*(1-p);
if(j) f[i][j]+=f[i-1][j-1]*p;
}
}
q=0;
for(int i=0;b*i<=a*n;i++) q+=f[n][i];
printf("%d\n",(int)(1/q));
}
int main(){
freopen("data.in","r",stdin);//
int t;
cin>>t;
for(int i=1;i<=t;i++){
cout<<"Case #"<<i<<": ";
solve();
}
return 0;
}