比赛 26暑假集训模拟赛2 评测结果 AAAAAAAAAA
题目名称 and I am home 最终得分 100
用户昵称 RpUtl 运行时间 0.054 s
代码语言 C++ 内存使用 3.72 MiB
提交时间 2026-07-02 11:07:09
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
const int N = 5e5 + 10;
typedef long long ll;
ll g[N], f[N], n, fac[N], inv[N], ans, pw[N];
ll C(ll n, ll m) {
	return fac[n] * inv[m] % mod * inv[n - m] % mod; 
}
ll ksm(ll a, ll b) {
	ll ans = 1;
	while (b) {
		if (b & 1) ans = ans * a % mod;
		a = a * a % mod;
		b >>= 1;
	}
	return ans;
}
int main() {
	freopen("home.in", "r", stdin);
	freopen("home.out", "w", stdout);
	cin >> n;
	fac[0] = inv[0] = pw[0] = 1;
	for (int i = 1; i <= n; i++) {
		fac[i] = fac[i - 1] * i % mod;
		inv[i] = ksm(fac[i], mod - 2);
		pw[i] = pw[i - 1] * 4 % mod;
	}
	for (int i = 1; i <= n; i++) {
		if (i & 1) continue;
		g[i] = C(i, i / 2) * C(i, i / 2) % mod;
	}
	for (int i = 1; i <= n; i++) {
		f[i] = g[i];
		for (int j = 1; j <= n; j++) {
			f[i] -= f[j] * g[i - j] % mod;
			f[i] %= mod;
		}
	}
	ans = (n + 1) * pw[n] % mod;
	for (int i = 1; i <= n; i++) {
		ans -= f[i] * pw[n - i] % mod * (n - i + 1) % mod; 
		ans %= mod;
	}
	ans = (ans % mod + mod) % mod;
	cout << ans << '\n';
	return 0;
}