[NOIP2011] 计算系数

洛咕

题意:给定一个多项式\((ax+by)^k=\sum_{i=0}^kC_k^ia^ib^{k-i}x^iy^{k-i}\),请求出多项式展开后\(x^n \times y^m\)项的系数.

分析:由二项式定理\((a+b)^k=\sum_{i=0}^k C_n^ia^ib^{n-i}\)\((ax+by)^k=\sum_{i=0}^kC_k^ia^ix^ib^{k-i}y^{k-i}\),所以\(x^ny^m\)项的系数就是\(C_k^na^nb^m\),直接算组合数和快速幂就好了.

#include<bits/stdc++.h>
#define LL long long
using namespace std;
inline LL read(){
   LL s=0,w=1;char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar();}
   return s*w;
}
const LL mod=10007;
LL jc[1005];
inline LL ksm(LL a,LL b){
    LL cnt=1;
    while(b){
		if(b&1)cnt=(cnt*a)%mod;
		a=(a*a)%mod;
		b>>=1;
    }
    return cnt%mod;
}
inline LL C(LL n,LL m){
    if(n<m)return 0;
    return ((jc[n]*ksm(jc[m],mod-2))%mod*ksm(jc[n-m],mod-2))%mod;
}
int main(){
    LL a=read(),b=read(),k=read(),n=read(),m=read();
    jc[0]=1;for(int i=1;i<=k;i++)jc[i]=(jc[i-1]*i)%mod;
    printf("%lld\n",((ksm(a,n)*ksm(b,m))%mod*C(k,n))%mod);
    return 0;
}

posted on 2019-04-05 14:13  PPXppx  阅读(124)  评论(0编辑  收藏  举报