| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
终于过了……huuuuuuuuuuuuuuu!谁能告诉我母函数法怎么就用不了呢?
liurujia书上的式子居然是不对的,死活又重算了一条,和ac程序很多答案都相同啊
double binomial(int n, int k)
{
double N[100], K[100];
int nt = 0, kt = 0;
double t = 1.0;
int i;
if(n == 0)
{
return 1.0;
}
if(k > n / 2)
{
k = n - k;
}
for(i = 0; i < 100; i++)
{
N[i] = 1.0;
K[i] = 1.0;
}
for(i = n; i > n - k; i--)
{
double t = N[nt] * i;
if(t <= 1099511627776.0)
{
N[nt] = t;
}
else
{
nt++;
N[nt] = i;
}
}
for(i = k; i > 1; i--)
{
double t = K[kt] * i;
if(t <= 1099511627776.0)
{
K[kt] = t;
}
else
{
kt++;
K[kt] = i;
}
}
for(i = 0; i <= kt; i++)
{
N[i] /= K[i];
}
for(i = 0; i <= nt; i++)
{
t *= N[i];
}
return t;
}
double solve(int c, int m, int n)
{
double a[202] = {0.0}, p = 0.0;
int i, k;
if(m > c || m > n || ((m ^ n) & 1) != 0)
{
return 0.0;
}
for(k = c; k >= 0; k--)
{
for(i = max(0, k + m - c); i <= min(m, k); i++)
{
a[2 * k - c + c] += pow(-1.0, m - i) * binomial(c - m, k - i) * binomial(m, i);
}
}
for(k = -c; k <= c; k++)
{
p += a[k + c] * pow((double)k / c, n);
}
p *= pow(2, -c) * binomial(c, m);
return p;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator