CF2150B Grid Counting

题目描述

[ParagonX9 - HyperioxX](https://soundcloud.com/thorn-557109993/paragonx9-hyperioxx-id-223469) ⠀ Alice 有一个 $n \times n$ 的网格。最开始,所有的格子都是白色的。Alice 想要涂黑一些格子,并需要满足某些属性。 设 $(x_1, y_1), (x_2, y_2), \ldots, (x_m, y_m)$ 是被涂成黑色的格子。你会得到一个长度为 $n$ 的数组 $a$。下列条件必须被满足: - 对于每一行 $k$($1 \le k \le n$),恰好有 $a_k$ 个不同的 $i$($1 \le i \le m$)使得 $x_i = k$。也就是说,第 $k$ 行恰好有 $a_k$ 个黑色格子。 - 对于每一个 $k$($1 \le k \le n$),存在恰好一个 $i$ 使得 $\max(x_i, y_i) = k$。 - 对于每一个 $k$($1 \le k \le n$),存在恰好一个 $i$ 使得 $\max(x_i, n + 1 - y_i) = k$。 例如,当 $a = [2, 2, 1, 0, 0]$ 时,一组可能的黑色格子为 $\{(1,1), (2,2), (3,3), (2,4), (1,5)\}$。对应的网格如下: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF2150B/905e150d87d5d359c4d87324383d05651ff61ea74be0b8e79d4b31629462c1a0.png) 在给定黑色格子的条件下,统计可能的网格的方案数。只要存在某个格子在两个网格中黑白色不同,则认为两个网格不同。由于答案可能很大,请输出对 $998\,244\,353$ 取模的结果。

输入格式

每个测试用例包含多组数据。第一行为测试用例数量 $t$($1 \le t \le 10^4$)。 紧接着每个测试用例包含两行: 第一行为一个整数 $n$($2 \le n \le 2 \cdot 10^5$)。 第二行为 $n$ 个整数 $a_1, a_2, \ldots, a_n$($0 \le a_i \le n$)。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

每个测试用例输出一行,一个整数,表示符合条件的网格数,对 $998\,244\,353$ 取模。

说明/提示

- 第一个测试用例中,只有题目所示的那一种涂黑方案。 - 第二个测试用例中,唯一的合法方案为 $\{(1,1), (1,2)\}$。 - 第三个测试用例中,没有合法方案。 由 ChatGPT 5 翻译