1.题目引入:
给定一个多项式 (ax+by)k(ax+by)k,请求出多项式展开后 xnymxnym 项的系数。
输入格式
共一行,包含 55 个整数,分别为 a,b,k,n,ma,b,k,n,m 每两个整数之间用一个空格隔开。
输出格式
输出共 11 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对 1000710007 取模后的结果。
数据范围
对于 30%30% 的数据,有 0≤k≤100≤k≤10。
对于 50%50% 的数据,有 a=1,b=1a=1,b=1。
对于 100%100% 的数据,有 0≤k≤10000≤k≤1000,0≤n,m≤k0≤n,m≤k,且 n+m=kn+m=k,0≤a,b≤10000000≤a,b≤1000000。
2.样例输出:
Sample Input
1 1 3 1 2Sample Output
3
这里的二项式定理中需要用到快速幂和组合数,有二项式忘了的童鞋们可以参照一下下面
(本图是在网上截得非作者所有)下面我们来看一下怎么实现的吧。
3.代码如下:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int mod = 10007;
const int maxn=1e3+10;
int a,b,k,n,m;
int c[maxn][maxn];
void init()
{
for(int i=0;i<=1000;i++)
{
for(int j=0;j<=i;j++)
{
if (j == 0)
c[i][j]=1;
else
c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod; // 二项式中组合数的求法
}
}
}
int dfs(int a,int b) // 快速幂
{
int ans=1;
while (b)
{
if(b&1) ans=(long long)ans * a % mod;
a=(long long)a*a%mod;
b>>=1;
}
return ans % mod;
}
int main()
{
init();
cin>>a>>b>>k>>n>>m;
cout<<(long long)dfs(a,n)*dfs(b,m)*c[k][n]%mod;
return 0;
}