洛谷【 P1313 計算係數】二項式定理
阿新 • • 發佈:2019-01-01
題目描述
給定一個多項式(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; }