代码:
#include <cstdio>
using namespace std;
typedef long long ll;
const int MOD = 1e9 + 7;
ll mpow(ll a, ll b) {
ll p = 1;
while (b) {
if (b & 1) {
p = (p * a) % MOD;
}
b >>= 1;
a = (a * a) % MOD;
}
return p;
}
int main() {
static ll fact[1000005] = {1};
for (int i = 1; i <= 1e6; ++i) {
fact[i] = fact[i - 1] * i % MOD;
}
static ll finv[1000005];
finv[1000000] = mpow(fact[1000000], MOD - 2);
for (int i = 1e6 - 1; i >= 0; --i) {
finv[i] = finv[i + 1] * (i + 1) % MOD;
}
static ll d[1000005] = {1, 0};
for (int i = 2; i <= 1e6; ++i) {
d[i] = (i - 1) * (d[i - 1] + d[i - 2]) % MOD;
}
int t;
scanf("%d", &t);
while (t--) {
int n, m;
scanf("%d%d", &n, &m);
printf("%lld\n", fact[n] * finv[m] % MOD * finv[n - m] % MOD * d[n - m] % MOD);
}
return 0;
}
提交:https://www.luogu.com.cn/record/55575075 可以看到CE了但是没有编译信息。 我在本地编译过了,所以请各位大佬帮忙找找问题。