uva10169 - Urn-ball Probabilities !(缸和球的概率问题)

昏暗周末第一题。。。。

题意:两个罐子,A和B;

开始的时候A中1球、B中2球,但每个罐子中都有一个红球。

每次从两个罐子分别中取出1个球。记录结果然后放回,放回的同时向两个罐子中分别增加1个白球

如此反复操作。

问n次操作中,至少有1次取出的两个球都是红球的概率。 

若n次操作每次取出的球都是两个红球的概率小数点候有几个连续的0。

思路:

记f[i]表示前i次操作中至少有一次操作取出的两个球都是红球的概率, p[i]是第i次取出的两个球都是红球的概率。

则可推出一个递归关系: f[i+1] = f[i] + (1-f[i])*p[i] 

f[1] = 1/2;

f[2] = f[1] + (1-f[1])*(1/2)*(1/3);

f[3] = f[2] + (1-f[2])*(1/3)*(1/4);

求另一个结果的时候用的是log函数来计算的。

ans = p[1]*p[2]*p[3]*p[4].......p[n]

log(ans) = log(p[1])+log(p[2])+log(p[3])+log(p[4])+........+log(p[n]);

我们只需用循环结果求出来就行了

正确答案就是log(ans)的整数部分。

代码如下:

#include <cstdio>
#include <cmath>
#define N 1000005
double p[N], q[N];
int n;
void init()
{
    p[0] = 0.0;
    for(int i = 1; i < N; i++)
        p[i] = p[i-1]+(1-p[i-1])/(1.0*i*(i+1));
    q[0] = 0.0;
    for(int i = 1; i < N; i++)
        q[i] = q[i-1]+log10(1.0*i*(i+1));
}
int main ()
{
    init();
    while(~scanf("%d",&n))
    {
        printf("%.6lf %d\n",p[n],(int)q[n]);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值