NC16596 [NOIP2011]计算系数
题目链接
关键点:
1、对于 里面
的系数为(因为不会打排列组合的符号,就用文字描述)k的n的组合 *
*
2、对于求一个数的次方,可以采用快速幂
ll kuai(ll x, ll y)
{
ll ans = 1;
ll base = x;
while (y)
{
if (y&1) ans = (ans%MOD * base%MOD)%MOD;
base = (base%MOD*base%MOD)%MOD;
y>>=1;
}
return ans;
}
3、对于组合数,可以利用杨辉三角快速求出
for (int i=0; i<=k; i++)
f[i][0] = 1;
for (int i=1; i<=k; i++)
{
for (int j=1; j<=i; j++)
f[i][j] = (f[i-1][j] + f[i-1][j-1])%MOD;
}
完整代码:
# include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MOD = 10007;
ll a, b, k, n, m;
ll f[2000][2000];
ll kuai(ll x, ll y)
{
ll ans = 1;
ll base = x;
while (y)
{
if (y&1) ans = (ans%MOD * base%MOD)%MOD;
base = (base%MOD*base%MOD)%MOD;
y>>=1;
}
return ans;
}
int main()
{
scanf("%lld%lld%lld%lld%lld", &a, &b, &k, &n, &m);
for (int i=0; i<=k; i++)
f[i][0] = 1;
for (int i=1; i<=k; i++)
{
for (int j=1; j<=i; j++)
f[i][j] = (f[i-1][j] + f[i-1][j-1])%MOD;
}
ll ans = f[k][n]%MOD * kuai(a, n)%MOD * kuai(b, m)%MOD;
cout<<ans%MOD<<endl;
return 0;
}