一开始看错题目了,推出来的公式模拟第一组数据都过不了,后来看了题解重新读题才知道要取到n+1步,期望公式很好推,运算过程中乘以概率值不会导致精度溢出,具体过程看代码。。。
ACcode:
#include<stdio.h>
int n;
double p,res;
double solve(int n,double pro)
{
double ans=n*pro,s=1;
for (int i=1;i<=n;i++)
{
s*=pro*(1-pro)*(n+i)/i;
ans+=s*(n-i);
ans*=pro;
///通过不断乘p,循环结束时i=1的情况乘了n次,
///很有技巧性,一开始没想到
}
return ans;
}
int main()
{
int cas=0;
while (~scanf("%d%lf",&n,&p))
{
res=solve(n,p)+solve(n,1-p);
printf("Case %d: %lf\n",++cas,res);
}
return 0;
}