Lee • 1天前
using namespace std; const int mod = 1e9 + 7; int jx[1000001]; int ni[1000001]; int f[1000001];
int qw(int a, int b) {
int ans = 1;
while (b) {
if (b & 1) {
ans *= a;
ans %= mod;
}
a = a * a;
a %= mod;
b /= 2;
}
return ans;
}
signed main() {
int t;
scanf("%lld", &t);
jx[0] = jx[1] = 1;
for (int i = 2; i <= 1e6; i++) {
jx[i] = jx[i - 1] * i;
jx[i] %= mod;
}
ni[1000000] = qw(jx[1000000], mod - 2);
for (int i = 1e6 - 1; i >= 0; i--) {
ni[i] = ni[i + 1] * (i + 1);
ni[i] %= mod;
}
f[2] = f[0] = 1;
for (int i = 3; i <= 1e6; i++) {
f[i] = (i - 1) * (f[i - 2] + f[i - 1]);
f[i] %= mod;
}
while (t--) {
int n, m;
scanf("%lld%lld", &n, &m);
int ans = jx[n] * ni[m];
ans %= mod;
ans *= ni[n - m];
ans %= mod;
n -= m;
ans *= f[n];
ans %= mod;
printf("%lld\n", ans);
}
return 0;
}
评论:
请先登录,才能进行评论