这精度问题我tm真是醉了!!!
#include <bits/stdc++.h>
#define MAXN 500222
using namespace std;
long double factor[MAXN];
void init(void)
{
for (int i = 2; i < MAXN; i++)factor[i] = factor[i-1]+log(i);
}
long double combination(int n, int m)
{
return factor[n] - factor[m] - factor[n - m];
}
int main(void)
{
int n, k = 1;
double p;
init();
while (scanf("%d%lf", &n, &p)!=EOF)
{
double sum = 0.0;
for (int i = 1; i <= n; i++)
{
long double v1 = combination(2*n-i, n)+(n+1)*log(p)+(n-i)*log(1-p);
long double v2 = combination(2*n-i, n)+(n+1)*log(1-p)+(n-i)*log(p);
sum += i*(exp(v1)+exp(v2));
}
printf("Case %d: %.6lf\n", k++, sum);
}
return 0;
}