题目链接
题目大意
第0天,有N-1人和1个吸血者。每天,他们中只有两个相遇。如果他们是同一物种,也就是说,一个民族遇到一个民族,或者一个吸血者遇到一个吸血者,什么都不会发生。否则,人们会有概率P变成吸血人。当所有人都变成吸血人的天数D的期望。
解题思路
我真的是!!!!被这个题的精度安排的明明白白的。。。。。。我已经无力吐槽了。。。心好累。。。。
dp[i]代表现在有i个人是吸血人时到所有人都是吸血人的期望
那么我们可得dp[i] = dp[i+1] * p1 + dp[i] * (1-p1);
化简之后可得dp[i] = dp[i+1] + 1/p1; p1=C(1,i) * C(1,n-i) / C(2,n) * p;
所以1/p1=n*(n-1) / (2 * i * (n-i) * p);
这个精度。。。。怕了怕了。。。。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
double dp[100005];
int main()
{
int T,n;
double p;
scanf("%d",&T);
while(T--)
{
scanf("%d %lf",&n,&p);
dp[n]=0;
for(int i=n-1;i>=1;i--)
{
dp[i]=dp[i+1]+(1.0*n*(n-1))/(2.0*i*(n-i)*p);
}
printf("%.3f\n",dp[1]);
}
return 0;
}