题目描述
给定一个多项式(by+ax)^k,请求出多项式展开后x^n * y^m项的系数。
输入输出格式
输入格式:
共一行,包含55个整数,分别为a ,b ,k ,n ,m,每两个整数之间用一个空格隔开。
输出格式:
共1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对1000710007 取模后的结果。
输入输出样例
输入样例#1:
1 1 3 1 2
输出样例#1:
3
说明
【数据范围】
对于30\%30% 的数据,有0 ≤k ≤100≤k≤10 ;
对于50\%50%的数据,有a = 1,b = 1a=1,b=1;
对于100\%100%的数据,有0≤k ≤1,000,0≤n, m≤k0≤k≤1,000,0≤n,m≤k,且n+m=k ,0 ≤a,b ≤1,000,000n+m=k,0≤a,b≤1,000,000。
noip2011提高组day2第1题
题解:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#define ll long long
#define mod 10007
using namespace std;
const int maxn = 1010;
int C[maxn][maxn];
ll quick_pow(ll a, ll b){ll ans = 1, res = a;while(b){if(b & 1) ans = ans * res % mod;res = res * res % mod;b >>= 1;}return ans;
}
int main()
{int a, b, k, n, m;cin >> a >> b >> k >> n >> m;memset(C, 0, sizeof C);k = n + m;for(int i = 0; i <= k; i++)C[i][0] = 1;for(int i = 1; i <= k; i++)C[i][1] = i, C[i][i] = 1;for(int i = 1; i <= k; i++)for(int j = 1; j <= m; j++)if(i > j)C[i][j] = (C[i-1][j] + C[i-1][j-1])%mod;int ans = 0;ans = (C[k][m] * quick_pow(a, n) * quick_pow(b, m))%mod;printf("%d\n", ans);return 0;
}