一本通1648【例 1】「NOIP2011」计算系数

1648: 【例 1】「NOIP2011」计算系数

时间限制: 1000 ms         内存限制: 524288 KB

【题目描述】

给定一个多项式 (ax+by)k ,请求出多项式展开后 xnym 项的系数。

【输入】

输入共一行,包含 55 个整数,分别为 a,b,k,n,m ,每两个整数之间用一个空格隔开。

【输出】

输出共 1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对 10,007 取模后的结果。

【输入样例】

1 1 3 1 2

【输出样例】

3

【提示】

数据范围与提示

对于30% 的数据,有 k10

对于50% 的数据,有 a=1,b=1;

对于100% 的数据,有 0n,mk,且 n+m=k0a,b106

 

sol:这题应该挺容易的吧,可以用杨辉三角求出当a=1,b=1时xnym的系数,其实就是C(k,n)即C(n+m,n)

如果有a,b的话,很显然就是把C(n+m,n)乘上anbm

/*
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
*/
#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
    ll s=0;
    bool f=0;
    char ch=' ';
    while(!isdigit(ch))
    {
        f|=(ch=='-'); ch=getchar();
    }
    while(isdigit(ch))
    {
        s=(s<<3)+(s<<1)+(ch^48); ch=getchar();
    }
    return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
    if(x<0)
    {
        putchar('-'); x=-x;
    }
    if(x<10)
    {
        putchar(x+'0');    return;
    }
    write(x/10);
    putchar((x%10)+'0');
    return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int Mod=10007;
const int N=1005;
ll Jiec[N];
inline ll Ksm(ll x,ll y)
{
    x%=Mod;
    ll ans=1;
    while(y)
    {
        if(y&1) ans=ans*x%Mod;
        x=x*x%Mod;
        y>>=1;
    }
    return ans;
}
inline ll C(ll n,ll m)
{
    return Jiec[n]*Ksm(Jiec[m],Mod-2)%Mod*Ksm(Jiec[n-m],Mod-2)%Mod;
}
int main()
{
    int i,j;
    int a,b,k,n,m;
    R(a); R(b); R(k); R(n); R(m);
    Jiec[0]=1;
    for(i=1;i<=k;i++) Jiec[i]=Jiec[i-1]*i%Mod;
    Wl(Ksm(a,n)*Ksm(b,m)%Mod*C(n+m,n)%Mod);
    return 0;
}
/*
input
1 1 323 123 200
output
325

input
5 8 7 3 4
output
7470

input
123123 312321 900 400 500
output
817
*/
View Code

 

posted @ 2019-03-12 21:27  yccdu  阅读(332)  评论(0编辑  收藏  举报