#3425. 所有片段的选法(segsub)

所有片段的选法(segsub)

题目描述

小 P 有一个长度为 NN 的正整数序列 A1,A2,,ANA_1, A_2, \ldots, A_N 和一个目标正整数 SS。他对序列的每一个连续片段都提出同一个问题。

具体地,对于满足 1LRN1 \le L \le R \le N 的片段 AL,AL+1,,ARA_L, A_{L+1}, \ldots, A_R,定义 f(L,R)f(L, R) 为:从该片段中选出若干个位置 Lx1<x2<<xkRL \le x_1 < x_2 < \cdots < x_k \le R,使得 Ax1+Ax2++Axk=SA_{x_1} + A_{x_2} + \cdots + A_{x_k} = S 的方案数。一个位置至多选一次,不同选位置的方式视为不同方案。由于 S1S \ge 1,"一个位置都不选"的和为 00,不会被计入。

小 P 想把所有片段的 f(L,R)f(L, R) 加起来,即求

1LRNf(L,R).\sum_{1 \le L \le R \le N} f(L, R).

由于结果可能很大,你只需要输出该和对 998244353998244353 取模的结果。

输入格式

从标准输入读入数据。

第一行两个正整数 NNSS,用一个空格分隔。

第二行 NN 个正整数 A1,A2,,ANA_1, A_2, \ldots, A_N,表示序列,相邻两数用一个空格分隔。

输出格式

输出到标准输出。

输出一个整数,表示所有片段的 f(L,R)f(L, R) 之和对 998244353998244353 取模的结果。

样例

样例 1 输入

4 3
1 2 1 3

样例 1 输出

11

样例 1 解释

序列为 [1,2,1,3][1, 2, 1, 3]S=3S = 3。逐个片段计算 f(L,R)f(L, R)

  • f(1,1)=0f(1,1)=0f(1,2)=1f(1,2)=1(选 A1,A2A_1, A_2),f(1,3)=2f(1,3)=2(选 A1,A2A_1,A_2A2,A3A_2,A_3),f(1,4)=3f(1,4)=3(再增加单独选 A4A_4);
  • f(2,2)=0f(2,2)=0f(2,3)=1f(2,3)=1(选 A2,A3A_2,A_3),f(2,4)=2f(2,4)=2(再增加单独选 A4A_4);
  • f(3,3)=0f(3,3)=0f(3,4)=1f(3,4)=1(选 A4A_4);
  • f(4,4)=1f(4,4)=1(选 A4A_4)。

总和为 0+1+2+3+0+1+2+0+1+1=110+1+2+3+0+1+2+0+1+1=11

样例 2 输入

4 11
1 2 3 4

样例 2 输出

0

样例 2 解释

整个序列所有数之和为 1+2+3+4=101+2+3+4=10,已经小于 S=11S=11,因此没有任何子序列的和能等于 1111,所有 f(L,R)f(L, R) 均为 00,答案为 00

样例 3 输入

8 5
2 3 1 1 2 4 1 3

样例 3 输出

100

样例 3 解释

片段较多,按定义逐个累加 f(L,R)f(L, R) 即可得到 100100

数据范围

对于所有数据:

  • 1N30001 \le N \le 3000
  • 1S30001 \le S \le 3000
  • 1Ai30001 \le A_i \le 3000
  • 输入均为整数。

本题采用捆绑测试。只有通过一个子任务的全部测试,才能获得该子任务的分数。

  • 子任务 111010 分):N20N \le 20
  • 子任务 221515 分):N100N \le 100
  • 子任务 332020 分):S=1S = 1
  • 子任务 442020 分):Ai=1A_i = 1,其中 1iN1 \le i \le N
  • 子任务 553535 分):无附加限制。

提示

  • 答案对 998244353998244353 取模后输出;该数为质数。
  • 同一个片段内,每个位置至多被选一次,不同选位置的方式计为不同方案。