注意此题是算全部的人变成Bloodsucker的天数的期望,那么我们不妨转化成每天人变为Bloodsucker的期望。那么首先要知道每天只有一个人变为Bloodsucker。那么这就比较容易了。假设第i个人变为Bloodsucker的概率设为p[i];从而p[i]就可以容易的算出来了p[i]=i*(n-i)/n*(n-1)/2;每次都求和。
代码:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <queue>
#include <cstdio>
#include <cmath>
#include <string>
#include <stack>
#include <cctype>
using namespace std;
int main()
{
int T;
int n;
double p;
scanf("%d", &T);
while(T--)
{
scanf("%d%lf",&n,&p);
double ans=0;
double tmp=n*0.5*(n-1)/p;
for(int i=1; i<n; i++)
ans+=tmp/i/(n-i);
printf("%.3lf\n",ans);
}
return 0;
}