P1313 計算系數
阿新 • • 發佈:2017-09-07
tro stream noip2011 展開 描述 輸入輸出 二項式定理 計算 ios
題目描述
給定一個多項式(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題
題解:
楊輝三角求二項式系數
二項式定理 (a+b)^n=sigema(r=0--n)C(n r)*a^(n-r)*b^r
求x^n*y^m就是求 (a+b)^k的第(m+1)的系數,但是題目是(ax+by)^k,求x^n*y^m,就在原來楊輝三角求出的系數的基礎上乘上a^n*b^m
自己寫幾個公式推推就能發現。
代碼
#include<iostream> #include<cstdio> #define mod 10007 using namespace std; int a,b,k,n,m,c[1010][1010]; long longmul(int x,int y){ long long now=x,ans=1; while(y){ if(y&1)ans=ans*now%mod; now=now*now%mod; y>>=1; } return ans; } int main(){ scanf("%d%d%d%d%d",&a,&b,&k,&n,&m); c[0][0]=1; for(int i=1;i<=k;i++){ for(int j=0;j<=i;j++){if(j==0)c[i][j]=1; else if(j==i)c[i][j]=1;else c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod; } } cout<<c[k][m]*mul(a,n)%mod*mul(b,m)%mod; return 0; }
P1313 計算系數