hdu 4465 Candy(二次项概率)
题目链接: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 = 1; for(int m=n+1; m<=2*n; m++) { last *= (1-p)*(m)/(m-n)*p; ret += last*(2*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 = 0; while(cin>>n>>p) { ans = 0; ans += solve(n,p); ans += solve(n,1-p); printf("Case %d: %.6lf\n",++T,ans); } }