hdu 4465 Candy(二次项概率)

时间:2023-03-08 18:30:37

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4465

参考博客:http://www.cnblogs.com/goagain/archive/2012/11/20/2778633.html

看他的分析足够了

下面的代码也是他写的,觉得优美就贴下来:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std; double solve(int n,double p)
{
double ret = p*n;
double last = ;
for(int m=n+; m<=*n; m++)
{
last *= (-p)*(m)/(m-n)*p;
ret += last*(*n-m); //这里的last是取m个糖时候的概率*C(m,n),不包含后面的(2*n-m);
ret *= p; //把p分别乘进去
}
return ret;
} //精美的代码,很好的规避了溢出和精度问题。
int main()
{
// freopen("E:\\acm\\input.txt","r",stdin);
int n;
double p;
double ans;
int T = ; while(cin>>n>>p)
{
ans = ;
ans += solve(n,p);
ans += solve(n,-p); printf("Case %d: %.6lf\n",++T,ans);
}
}