CF1738E Balance Addicts
题目描述
给定一个长度为 $n$ 的整数序列 $a_1, a_2, \dots, a_n$,你的任务是计算将其划分为若干个**非空**且**连续**的子序列,使得这些子序列的元素和构成一个**平衡**序列的方案数,答案对 $998244353$ 取模。
一个长度为 $k$ 的序列 $s_1, s_2, \dots, s_k$ 被称为平衡的,当且仅当对于每个 $1 \leq i \leq k$,都有 $s_{i} = s_{k-i+1}$。例如,$[1, 2, 3, 2, 1]$ 和 $[1,3,3,1]$ 是平衡的,但 $[1,5,15]$ 不是。
形式化地,每一种划分可以用一个下标序列 $i_1, i_2, \dots, i_k$(长度为 $k$)来描述,满足 $1 = i_1 < i_2 < \dots < i_k \leq n$,并且:
1. $k$ 是划分出的非空连续子序列的个数;
2. 对于每个 $1 \leq j \leq k$,第 $j$ 个连续子序列从 $a_{i_j}$ 开始,到 $a_{i_{j+1}-1}$ 结束,其中 $i_{k+1} = n + 1$。即第 $j$ 个子序列是 $a_{i_j}, a_{i_j+1}, \dots, a_{i_{j+1}-1}$。
总共有 $2^{n-1}$ 种不同的划分方式。
令 $s_1, s_2, \dots, s_k$ 表示对应划分下每个子序列的元素和。形式化地,对于每个 $1 \leq j \leq k$,
$$
s_j = \sum_{i=i_{j}}^{i_{j+1}-1} a_i = a_{i_j} + a_{i_j+1} + \dots + a_{i_{j+1}-1}.
$$
例如,序列 $[1,2,3,4,5,6]$ 的划分 $[1\,|\,2,3\,|\,4,5,6]$ 可用下标序列 $[1,2,4]$ 描述,对应的子序列元素和为 $[1,5,15]$。
如果两个划分 $i_1, i_2, \dots, i_k$ 和 $i'_1, i'_2, \dots, i'_{k'}$(用下标序列描述)满足以下任一条件,则认为它们是不同的:
- $k \neq k'$;
- 存在某个 $1 \leq j \leq \min\left\{ k, k' \right\}$,使得 $i_j \neq i'_j$。
输入格式
每组测试数据包含多个测试用例。第一行包含一个整数 $t$($1 \leq t \leq 10^5$),表示测试用例的数量。接下来的每组测试用例描述如下:
每个测试用例的第一行包含一个整数 $n$($1 \leq n \leq 10^5$),表示序列 $a$ 的长度。
第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($0 \leq a_i \leq 10^9$),表示序列 $a$ 的元素。
保证所有测试用例中 $n$ 的总和不超过 $10^5$。
输出格式
对于每个测试用例,输出一个整数,表示将序列划分为若干个连续子序列,使得每个子序列的元素和构成平衡序列的划分方案数,对 $998244353$ 取模。
说明/提示
对于第一个测试用例,长度为 $1$ 的序列只有一种划分方式,即它本身,显然是平衡的。
对于第二个测试用例,有 $2$ 种划分方式:
- 整个序列 $[1, 1]$,此时 $s = [2]$,是平衡的;
- 划分为两个子序列 $[1\,|\,1]$,此时 $s = [1, 1]$,是平衡的。
对于第三个测试用例,有 $3$ 种划分方式:
- 整个序列 $[0, 0, 1, 0]$,此时 $s = [1]$,是平衡的;
- $[0 \,|\, 0, 1 \,|\, 0]$,此时 $s = [0, 1, 0]$,是平衡的;
- $[0, 0 \,|\, 1 \,|\, 0]$,此时 $s = [0, 1, 0]$,是平衡的。
对于第四个测试用例,有 $4$ 种划分方式:
- 整个序列 $[1, 2, 3, 2, 1]$,此时 $s = [9]$,是平衡的;
- $[1, 2 \,|\, 3 \,|\, 2, 1]$,此时 $s = [3, 3, 3]$,是平衡的;
- $[1 \,|\, 2, 3, 2 \,|\, 1]$,此时 $s = [1, 7, 1]$,是平衡的;
- $[1 \,|\, 2 \,|\, 3 \,|\, 2 \,|\, 1]$,此时 $s = [1, 2, 3, 2, 1]$,是平衡的。
对于第五个测试用例,有 $2$ 种划分方式:
- 整个序列 $[1, 3, 5, 7, 9]$,此时 $s = [25]$,是平衡的;
- $[1, 3, 5 \,|\, 7 \,|\, 9]$,此时 $s = [9, 7, 9]$,是平衡的。
对于第六个测试用例,所有可能的划分都应计入答案。因此答案为 $2^{32-1} \equiv 150994942 \pmod {998244353}$。
由 ChatGPT 4.1 翻译