Candy(期望+对数精度处理)

#include<cstdio>#include<cmath>using namespace std;const int maxn = 200000 + 5;long double logF[maxn*2+1]; long double logC(int m,int n){return logF[m]-logF[n]-logF[m-n];}int main(){for(int i=1;i<=maxn*2;i++)logF[i]=logF[i-1]+log(i);int n,kase=0;double p;while(scanf("%d%lf",&n,&p)==2){double ans=0.0;for(int i=1;i<=n;i++){long double c = logC(2*n-i,n);long double v1=c+(n+1)*log(p)+(n-i)*log(1-p);long double v2=c+(n+1)*log(1-p)+(n-i)*log(p);ans +=(double) i*(exp(v1)+exp(v2));}printf("Case %d: %.6lf\n",++kase,ans);}}ans和p都必须是double型的,不知为什么用long double会出错。

,我们首先去了象鼻山,那里景色秀丽神奇,

Candy(期望+对数精度处理)

相关文章:

你感兴趣的文章:

标签云: