题解:P6162 [Cnoi2020] 四角链
szh_AK_all · · 题解
分析
不妨先设
第二类斯特林数的式子是
设
Code
#include <bits/stdc++.h>
using namespace std;
#define int long long
int mod = 998244353;
int jie[1000005], inv[1000005];
int qpow(int a, int b) {
int ans = 1;
while (b) {
if (b % 2 == 1)
ans = ans * a % mod;
a = a * a % mod;
b /= 2;
}
return ans;
}
int c(int n, int m) {
return jie[n] * inv[m] % mod * inv[n - m] % mod;
}
signed main() {
int n, k;
cin >> n >> k;
jie[0] = 1;
inv[0] = qpow(1, mod - 2);
for (int i = 1; i <= n; i++)
jie[i] = jie[i - 1] * i % mod, inv[i] = qpow(jie[i], mod - 2);
int ans = 0;
for (int i = 0; i <= n - k - 1; i++) {
int f = 1;
if (i % 2 == 1)
f = -1;
ans += f * c(n - k, i) % mod * qpow(n - k - i, n) % mod;
if (ans > mod)
ans -= mod;
if (ans < 0)
ans += mod;
}
ans = ans * inv[n - k] % mod;
cout << ans;
}