CF1919E Counting Prefixes
题目描述
有一个长度为 $n$ 的隐藏数组 $a$,其元素仅为 $1$ 或 $-1$。令 $p$ 为数组 $a$ 的前缀和数组。更正式地,$p$ 是一个长度为 $n$ 的数组,定义为 $p_i = a_1 + a_2 + \ldots + a_i$。随后,将数组 $p$ 按非递减顺序排序。例如,如果 $a = [1, -1, -1, 1, 1]$,则排序前 $p = [1, 0, -1, 0, 1]$,排序后 $p = [-1, 0, 0, 1, 1]$。
现在你得到了排序后的前缀和数组 $p$,但你并不知道原始数组 $a$。你的任务是统计有多少个原始数组 $a$,经过上述过程后能得到给定的排序后前缀和数组 $p$。由于答案可能很大,只需输出对 $998\,244\,353$ 取模的结果。
输入格式
每组测试数据包含多个测试用例。第一行包含一个整数 $t$($1 \leq t \leq 1000$),表示测试用例的数量。
每个测试用例的第一行包含一个整数 $n$($1 \le n \le 5000$),表示隐藏数组 $a$ 的长度。
每个测试用例的第二行包含 $n$ 个整数 $p_1, p_2, \ldots, p_n$($|p_i| \le n$),表示排序后的前缀和数组 $p$。
保证 $p_1 \le p_2 \le \ldots \le p_n$。
保证所有测试用例中 $n$ 的总和不超过 $5000$。
输出格式
对于每个测试用例,输出一个答案,对 $998\,244\,353$ 取模。
说明/提示
在前两个测试用例中,$n=1$ 时,唯一可能的数组 $a$ 分别为 $a=[1]$ 和 $a=[-1]$。它们对应的排序后前缀和数组分别为 $p=[1]$ 和 $p=[-1]$。因此,没有数组 $a$ 能得到 $p=[0]$,而恰好有 $1$ 个数组 $a$ 能得到 $p=[1]$。
在第三个测试用例中,可以证明没有数组 $a$ 能得到 $p=[-1, 1, 2]$。
在第四个测试用例中,能够得到 $p=[-1, 0, 0, 1, 1]$ 的 $3$ 个数组 $a$ 分别为:
- $a = [1, -1, 1, -1, -1]$,排序前前缀和为 $p = [1, 0, 1, 0, -1]$,排序后为 $p = [-1, 0, 0, 1, 1]$。
- $a = [1, -1, -1, 1, 1]$,排序前前缀和为 $p = [1, 0, -1, 0, 1]$,排序后为 $p = [-1, 0, 0, 1, 1]$。
- $a = [-1, 1, 1, -1, 1]$,排序前前缀和为 $p = [-1, 0, 1, 0, 1]$,排序后为 $p = [-1, 0, 0, 1, 1]$。
对于第五个测试用例,唯一能得到 $p=[-4, -3, -3, -2, -1]$ 的数组 $a$ 是 $a=[-1, -1, -1, -1, 1]$。
由 ChatGPT 4.1 翻译