[NOIP2011]计算系数
[NOIP2011]计算系数
https://ac.nowcoder.com/acm/problem/16596
题目描述
给定一个多项式(ax+by)k,请求出多项式展开后xnym项的系数。
输入描述:
共一行,包含5个整数,分别为a,b,k,n,m,每两个整数之间用一个空格隔开。
输出描述:
输出共1行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007取模后的结果。
示例1
输入
1 1 3 1 2 输出
3
这道题我一开始只通过30%,一直搜组合数学,各种方式还是通过不了;
看别人的代码也是求组合式的值那块一脸懵逼,不知所云。
然后查阅资料才知道原来有这么一个公式算组合式的值
其他思路相信你也和我差不多。
实现代码如下
#include<iostream>
using namespace std;
typedef long long ll;
const int mod=10007;
ll fac[1010];
void da()
{
fac[0]=1;
for(int i=1;i<1010;i++)
{
fac[i]=fac[i-1]*i%mod;
}
}
ll fastpow(ll x,ll n)
{
if(n==1)return x%mod;
ll temp=(fastpow(x,n/2))%mod;
if(n&1)return (x*temp*temp)%mod;
else return (temp*temp)%mod;
}
ll C(ll n,ll k)
{
return (fac[n]*fastpow(fac[k]*fac[n-k]%mod,mod-2))%mod;
}
int main()
{
da();
ll a,b,k,n,m;
cin>>a>>b>>k>>n>>m;
cout<<((C(k,n)%mod)*(fastpow(a,n)%mod)*(fastpow(b,m)%mod))%mod<<endl;
return 0;
}