1648: 【例 1】「NOIP2011」计算系数
时间限制: 1000 ms 内存限制: 524288 KB
【题目描述】
给定一个多项式 (ax+by)k ,请求出多项式展开后 xnym 项的系数。
【输入】
输入共一行,包含 55 个整数,分别为 a,b,k,n,m ,每两个整数之间用一个空格隔开。
【输出】
输出共 1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对 10,007 取模后的结果。
【输入样例】
1 1 3 1 2
【输出样例】
3
【提示】
数据范围与提示
对于30% 的数据,有 k≤10;
对于50% 的数据,有 a=1,b=1;
对于100% 的数据,有 0≤n,m≤k,且 n+m=k,0≤a,b≤106。
sol:这题应该挺容易的吧,可以用杨辉三角求出当a=1,b=1时xnym的系数,其实就是C(k,n)即C(n+m,n)
如果有a,b的话,很显然就是把C(n+m,n)乘上anbm
/* 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 */ #include <bits/stdc++.h> using namespace std; typedef int ll; inline ll read() { ll s=0; bool f=0; char ch=' '; while(!isdigit(ch)) { f|=(ch=='-'); ch=getchar(); } while(isdigit(ch)) { s=(s<<3)+(s<<1)+(ch^48); ch=getchar(); } return (f)?(-s):(s); } #define R(x) x=read() inline void write(ll x) { if(x<0) { putchar('-'); x=-x; } if(x<10) { putchar(x+'0'); return; } write(x/10); putchar((x%10)+'0'); return; } #define W(x) write(x),putchar(' ') #define Wl(x) write(x),putchar(' ') const int Mod=10007; const int N=1005; ll Jiec[N]; inline ll Ksm(ll x,ll y) { x%=Mod; ll ans=1; while(y) { if(y&1) ans=ans*x%Mod; x=x*x%Mod; y>>=1; } return ans; } inline ll C(ll n,ll m) { return Jiec[n]*Ksm(Jiec[m],Mod-2)%Mod*Ksm(Jiec[n-m],Mod-2)%Mod; } int main() { int i,j; int a,b,k,n,m; R(a); R(b); R(k); R(n); R(m); Jiec[0]=1; for(i=1;i<=k;i++) Jiec[i]=Jiec[i-1]*i%Mod; Wl(Ksm(a,n)*Ksm(b,m)%Mod*C(n+m,n)%Mod); return 0; } /* input 1 1 323 123 200 output 325 input 5 8 7 3 4 output 7470 input 123123 312321 900 400 500 output 817 */