uva557 - Burger(汉堡)

概率计算,,,

先计算它的对立事件的概率比较简单。就是最后两个分到的汉堡不一样。

那么最后两个肯定是两个不同的。

所以这种事件的总数有c(n-2,(n-2)/2)个,

开始的时候用总数为c(n,n/2)来计,发现连样例都过不了。。

后来用2^(2-n)来乘。得到的概率就行了。。

回过去。才认识到自己的错误,这种选择排列在两种汉堡都有剩余的时候才是等概率的。。

所以c(n,n/2)中有很多不成立的情况。

计算变得简单起来。。

f[n] = 2^(2-n)*c(n-2,(n-2)/2);

然后推得递归关系: f[n+2] = (n-1)/n*f[n];

代码如下:

#include <cstdio>
#include <cmath>
#define N 100000
double p[N+5];
int init()
{
    p[2] = 1.0;
    for(int i = 2; i < N; i++)
    p[i+2] = 1.0*(i-1)/i*p[i];
}
int main ()
{
    int n, t;
    init();
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        printf("%.4lf\n",1-p[n]);
    }
    return 0;
}


你可能感兴趣的:(uva557 - Burger(汉堡))