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; }