Friday, December 2, 2011

NOIP2011 Day2 计算系数

这道题和数学有密切关系,涉及到一个叫做二项式定理的东西(维基百科)。不过,即使不了解上面那个所谓的定理,我们也可以手工列举几个m,n,k模拟一下,就会发现系数和组合数的关系了。

#include <stdio.h>
#include <stdlib.h>

long long f[1010][1010];

long long times(long long a,int e)
{
    long long res = 1;
    while(e > 0)
    {
        res = (res * a) % 10007;
        e --;
    }
    return res;
}

void combination()
{
    int i,j;
    for(i = 0;i < 1010;i ++)
    {
        f[i][0] = 1;
        for(j = 1;j <= i;j ++)
        {
            f[i][j] = (f[i - 1][j] + f[i - 1][j - 1]) % 10007;
        }
    }
}

int main()
{
    long a,b,k,m,n;
    scanf("%ld%ld%ld%ld%ld",&a,&b,&k,&n,&m);
    combination();
    printf("%lld\n",((f[k][m] * times(a,n)) % 10007) * times(b,m) % 10007);
    return 0;
}

不过考试的时候这道题我只得了60分,也许是因为没有使用long long型吧。

No comments:

Post a Comment