1 条题解

  • 0
    @ 2026-9-2 10:46:58

    solution

    二项式定理:$$\begin{aligned} (x+y)^n=\sum_{i=0}^n C_n^i x^i y^{n-i} \end{aligned}$$。

    所以 $$\begin{aligned} (ax+by)^k=\sum_{i=0}^k C_{k, i} (ax)^i (by)^{k-i} &= \sum_{i=0}^k C_{k, i} a^i b^{k-i} x^i y^{k-i}\end{aligned}$$。

    n+m=kn+m=k,求 xnymx^n y^m 的系数,令 i=ni=nki=mk-i=m,其系数是 Ck,nanbmC_{k, n} a^n b^m

    anbma^n b^m 直接乘就行,不用快速幂。考虑 Ck,nC_{k, n}

    nn 个数选 mm 个数,求方案数 Cn,mC_{n, m},对于其中一个数考虑选不选。

    • 若选这个数,则应在另外 n1n-1 个数中选 m1m-1 个数,方案数 Cn1,m1C_{n-1, m-1}
    • 若不选,则要在另外 n1n-1 个数中选 mm 个数,方案数 Cn1,mC_{n-1, m}

    由加法原理得到组合数递推公式:Cn,m=Cn1,m+Cn1,m1C_{n, m}=C_{n-1, m}+C_{n-1, m-1}

    code

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long  LL;
    const LL P=10007;
    LL fac[1010];
    LL qpow(LL a,LL b)
    {
    	LL ans=1%P;a%=P;
    	for(;b;b>>=1,a=a*a%P)if(b&1)ans=ans*a%P;
    	return ans;
    }
    LL C(LL n,LL m)
    {
    	return fac[n]*qpow(fac[m],P-2)%P*qpow(fac[n-m],P-2)%P;
    }
    int main()
    {
    	LL a,b,k,n,m;scanf("%lld%lld%lld%lld%lld",&a,&b,&k,&n,&m);
    	fac[0]=1;for(int i=1;i<=k;i++) fac[i]=fac[i-1]*i%P;
    	LL ans=qpow(a,n) *qpow(b,m) %P* C(n+m,m)%P;
    	printf("%lld\n",ans); 
        return 0;
    }
    
    
    • 1

    信息

    ID
    412
    时间
    1000ms
    内存
    128MiB
    难度
    6
    标签
    递交数
    157
    已通过
    44
    上传者