2.样例输出:给定一个多项式 (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。
Sample Input
1 1 3 1 2Sample Output
3
3.代码如下:这里的二项式定理中需要用到快速幂和组合数,有二项式忘了的童鞋们可以参照一下下面
(本图是在网上截得非作者所有)下面我们来看一下怎么实现的吧。
#include#include #include #include 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; }



