洛谷P1313 [NOIP2011提高组Day2T1]计算系数
P1313 计算系数
题目描述
给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数。
输入输出格式
输入格式:输入文件名为factor.in。
共一行,包含5 个整数,分别为 a ,b ,k ,n ,m,每两个整数之间用一个空格隔开。
输出格式:输出共1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模后的结果。
输入输出样例
输入样例#1:
1 1 3 1 2
输出样例#1:
3
说明
【数据范围】
对于30% 的数据,有 0 ≤k ≤10 ;
对于50% 的数据,有 a = 1,b = 1;
对于100%的数据,有 0 ≤k ≤1,000,0≤n, m ≤k ,且n + m = k ,0 ≤a ,b ≤1,000,000。
noip2011提高组day2第1题
【题解】
二项式定理
可以Oklogmax(a,b)做的
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 6 inline void read(long long &x) 7 { 8 x = 0;char ch = getchar(), c = ch; 9 while(ch < '0' || ch > '9')c = ch, ch = getchar(); 10 while(ch <= '9' && ch >= '0')x = x * 10 + ch - '0', ch = getchar(); 11 if(c == '-')x = -x; 12 } 13 14 const long long INF = 0x3f3f3f3f3f3f3f3f; 15 const long long MOD = 10007; 16 const long long MAXK = 1200 + 10; 17 18 long long pow(long long a, long long b) 19 { 20 long long r = 1, base = a%MOD; 21 for(;b;b >>= 1) 22 { 23 if(b & 1)r *= base, r %= MOD; 24 base *= base;base %= MOD; 25 } 26 return r; 27 } 28 29 long long C[MAXK][MAXK],a,b,k,n,m; 30 31 int main() 32 { 33 read(a),read(b),read(k),read(n),read(m); 34 35 for(register long long i = 0;i <= k;++ i) C[i][0] = 1; 36 for(register long long i = 1;i <= k;++ i) 37 for(register long long j = 1;j <= i;++ j) 38 C[i][j] = (C[i - 1][j] + C[i - 1][j - 1])%MOD; 39 printf("%lld", ((C[k][m] * pow(b,m))%MOD * pow(a, n))%MOD); 40 return 0; 41 }