提交时间:2026-04-11 15:29:59
运行 ID: 41171
#include <cstdio> #include <cstring> namespace Main { using namespace std; typedef long long LL; typedef unsigned int UI; typedef unsigned long long UL; static LL read() { static LL res, f, ch; f = 1; for (ch = getchar(); (ch < '0' || ch > '9') && ch != EOF; ch = getchar()) if (ch == '-') f = -1; for (res = 0; ch >= '0' && ch <= '9'; ch = getchar()) res = (res << 3) + (res << 1) + (ch & 15); return res * f; } constexpr static bool T = 0; constexpr static int N = 20005, MOD = 998244353; LL pow(LL x, LL y = MOD - 2, LL m = MOD) { LL res = 1; for (x %= m; y; y >>= 1) { if (y & 1) res = res * x % m; x = x * x % m; } return res; } LL c2[N], ifac[N], ans[N], f[2][N], g[2][N]; void init(int n) { ifac[0] = ifac[1] = 1; for (int i = 2; i <= n; ++i) ifac[i] = (MOD - MOD / i) * ifac[MOD % i] % MOD; for (int i = 2; i <= n; ++i) ifac[i] = ifac[i - 1] * ifac[i] % MOD; return; } void solve() { int n = read(), k = read(); init(n); for (int i = 1; i <= (n + 1) << 1; ++i) c2[i] = (i - 1) * i / 2 % MOD; f[1][2] = g[1][1] = 1; for (int i = 1; i <= n; ++i) { int o = i & 1; ans[i] = 0; for (int j = 2; j <= 2 * i; ++j) ans[i] += f[o][j]; ans[i] = pow(ans[i], k); for (int j = 1; j < i; ++j) (ans[i] -= ans[j] * g[o][j]) %= MOD; ans[i] = ans[i] * ifac[i] % MOD; printf("%lld\n", ans[i] < 0 ? ans[i] + MOD : ans[i]); for (int j = 1; j <= i + 1; ++j) g[!o][j] = (g[o][j] + g[o][j - 1]) * j % MOD; for (int j = 2; j <= 2 * i; ++j) { (f[!o][j] += f[o][j] * c2[j]) %= MOD; (f[!o][j + 1] += f[o][j] * j * (j + 1)) %= MOD; (f[!o][j + 2] += f[o][j] * c2[j + 2]) %= MOD; f[o][j] = 0; } } return; } void main() { freopen("count.in", "r", stdin); freopen("count.out", "w", stdout); for (int t = T ? read() : 1; t; --t) solve(); return; } } // namespace Main int main() { Main::main(); return 0; }