Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17763
  • 博文数量: 11
  • 博客积分: 267
  • 博客等级: 二等列兵
  • 技术积分: 135
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-20 21:56
文章分类

全部博文(11)

文章存档

2011年(11)

我的朋友

分类: C/C++

2011-11-02 21:21:49

一道概率题,可以这样考虑:

根据题意,每天只能增加一个Bloodsucker,也就是说n-1个正常人是一个接着一个变成Bloodsucker的,那么所有正常人变成Bloodsucker的天数期望等于所有正常人变成Bloodsucker的天数期望之和。考虑n-1个正常人中第i个变成Bloodsucker的正常人的转变概率为:

P[i] = i*(n-i)/(n*(n-1)/2)

则天数期望为(直接从概率的定义考虑):

D[i] = 1/P[i]

于是:

D = sum(D[i])
代码如下:

  1. #include <stdio.h>

  2. int main() {
  3.     int T;
  4.     int n;
  5.     double p;
  6.     scanf("%d", &T);
  7.     while(T--) {
  8.     scanf("%d %lf", &n, &p);
  9.     
  10.     double res = 0;
  11.     double tmp = n*0.5*(n-1)/p;
  12.     int i;
  13.     for( i=1; i<=(n-1)/2; i++) {
  14.      res += tmp/i/(n-i);
  15.     }
  16.     res *= 2;
  17.     res += (n%2==0)?(4*tmp/n/n):0;
  18.     
  19.     printf("%.3lf\n", res);

  20.     }
  21.     return 0;
  22. }

阅读(1006) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~