题解
2026-08-02 21:01:46
发布于:广东
9阅读
0回复
0点赞
#include <cstdio>
#include <cstring>
#define int long long
const int mod = 998244353;
const int N = 200010;
int fpow(int a, int b) {
int res = 1;
while (b) {
if (b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
int fac[2 * N + 10], inv[2 * N + 10];
void init(int n) {
fac[0] = 1;
for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i % mod;
inv[n] = fpow(fac[n], mod - 2);
for (int i = n - 1; i >= 0; i--) inv[i] = inv[i + 1] * (i + 1) % mod;
}
int AA(int a, int b) {
int res = 1;
for (int i = a; i >= 1; i -= 2) {
res = res * i % mod;
}
return res;
}
int C(int a, int b) {
if (a < b) return 0;
return fac[a] * inv[b] % mod * inv[a - b] % mod;
}
int a[N];
signed main() {
int n;
scanf("%lld", &n);
init(2 * N);
scanf("%lld", &a[1]);
int l = 1, r = 1;
int A = 0, B = 0;
int ans = 1;
for (int i = 2; i <= n; i++) {
scanf("%lld", &a[i]);
if (a[i] == a[i - 1]) {
r = i;
} else {
if ((r - l) % 2) {
printf("0");
return 0;
}
if (r - l >= 2) {
int numa = r - l - 1;
int numb = (r - l + 1) / 2;
ans = ans * AA(numa, numb) % mod * C(numb + B, B) % mod;
A += r - l - 1;
B += (r - l + 1) / 2;
}
l = i, r = i;
}
}
if ((r - l) % 2) {
printf("0");
return 0;
}
if (r - l >= 2) {
int numa = r - l - 1;
int numb = (r - l + 1) / 2;
ans = ans * AA(numa, numb) % mod * C(numb + B, B) % mod;
}
printf("%lld", ans);
return 0;
}
全部评论 1
1
2026-08-02 来自 广东
0








有帮助,赞一个