「NOIP2011」计算系数 题解
「NOIP2011」计算系数
题意
给定一个多项式 \((ax + by)^k\),求多项式展开后\(x^n y^m\)项的系数。
解
二项式定理科普
完了,就是板子题。
显然这个多项式还要乘上一个 \(C^n_k\)
Code
#include <bits/stdc++.h>
using i64 = long long;
inline i64 read(){
i64 x = 0, f = 1;char ch = getchar();
while (ch < '0' || ch > '9') f = ch == '-' ? -1 : 1, ch = getchar();
while (ch >= '0' && ch <= '9') x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar();
return x * f;
}
inline void print(i64 x){
char P[105];i64 w=0;if(x==0){putchar('0');return;}
if(x<0) putchar('-'),x=(~x) + 1;
while(x) P[++w]=x%10+'0',x/=10;
for(i64 i=w; i>=1; i--) putchar(P[i]);
}
constexpr int p = 10007;
i64 n, m;
inline i64 q_pow(i64 a, i64 b){
i64 ans = 1;
while (b) {
if (b & 1) ans = (ans * a) % p;
a = (a * a) % p;
b >>= 1;
}
return ans;
}
inline i64 c(i64 n, i64 m) {
i64 ans1 = 1, ans2 = 1;
while (m) {
ans1 = (ans1 * n) % p;
ans2 = (ans2 * m) % p;
n--, m--;
}
i64 Ans = 1ll * ans1 * q_pow(ans2, p - 2) % p;
return Ans;
}
inline i64 lucas(i64 n, i64 m) {
return m == 0 ? 1 : (c(n % p, m % p) * lucas(n / p, m / p) % p);
}
inline void solve() {
int a = read(), b = read(), k = read();
n = read(), m = read();
print((lucas(k, n) * q_pow(a, n) % p * q_pow(b, m) % p)% p); putchar('\n');
}
int main() {
solve();
return 0;
}

浙公网安备 33010602011771号