| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 41232 | Gapple | 【BJ】T2 | C++ | 运行超时 | 40 | 1000 MS | 916 KB | 2360 | 2026-04-11 16:33:38 |
#include <algorithm> #pragma GCC optimize("Ofast,no-stack-protector,inline,fast-math,unroll-loops,omit-frame-pointer") #define NDEBUG #include <iostream> #include <utility> #include <vector> using namespace std; using u64 = unsigned long long; constexpr u64 MOD = 998244353, INV_2 = 499122177; inline void add_mod(u64& x, u64 y) { x = (x + y + MOD) % MOD; } inline u64 add_mod(u64&& x, u64 y) { return (x + y + MOD) % MOD; } inline u64 mul_mod(u64 x, u64 y) { return x * y % MOD; } inline u64 mul_mod(u64 x, u64 y, u64 z) { return mul_mod(x, mul_mod(y, z)); } inline u64 mul_mod(u64 x, u64 y, u64 z, u64 w) { return mul_mod(mul_mod(x, y), mul_mod(z, w)); } u64 pow_mod(u64 x, u64 y) { u64 res = 1; for (; y > 0; y >>= 1, x = mul_mod(x, x)) { if (y & 1) res = mul_mod(res, x); } return res; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int N, k; cin >> N >> k; vector<u64> nxt(2 * N + 1), dp(2 * N + 1), one(N + 1); dp[2] = one[1] = 1; for (int i = 2; i <= N; ++i) { fill(nxt.begin(), nxt.end(), 0); for (int j = 2; j <= 2 * i; ++j) { u64 cur = dp[j]; if (dp[j] == 0) continue; nxt[j + 2] += mul_mod(cur, j + 1, j + 2, INV_2); nxt[j + 1] += mul_mod(cur, j + 1, j); nxt[j] += mul_mod(cur, j, j - 1, INV_2); } swap(dp, nxt); for (int j = 2; j <= 2 * i; ++j) one[i] += (dp[j] %= MOD); one[i] %= MOD; } vector<u64> ans(N + 1), coeff(N + 1), inv(N + 1); // coeff[i][j]:把 i 个球放入 j 个箱子 ans[1] = coeff[1] = inv[1] = 1; cout << "1\n"; u64 ifact = 1; nxt.resize(N + 1); for (int i = 2; i <= N; ++i) { inv[i] = mul_mod(MOD - MOD / i, inv[MOD % i]); ifact = mul_mod(ifact, inv[i]); fill(nxt.begin(), nxt.end(), 0); ans[i] = pow_mod(one[i], k); for (int j = 1; j < i; ++j) { nxt[j] = add_mod(coeff[j] * j, coeff[j - 1]); ans[i] += MOD - mul_mod(nxt[j], ans[j]); } nxt[i] = add_mod(coeff[i] * i, coeff[i - 1]); swap(coeff, nxt); cout << mul_mod(ans[i] %= MOD, ifact) << '\n'; } return 0; }