P1054遗失的赋值assign

时间限制 1000 ms内存限制 512 MiB通过率 —
显示算法标签组合数学 · 动态规划 · 计数

【题目描述】

小 X 在整理旧档案时找到了一份赋值记录。记录原本写有一个长度为 nn0101 序列 x1,x2,,xnx_1,x_2,\ldots,x_n,但每个位置的具体赋值已经遗失,只留下了若干核对结果。

对于每个 1ink+11\leq i\leq n-k+1,记录中保存了一个整数 sis_i。它表示从位置 ii 开始的连续 kk 个位置之和,即 si=j=ii+k1xjs_i=\sum_{j=i}^{i+k-1}x_j

记录中还写明,整个序列恰好有 mm 个位置的值为 11

小 X 希望补全这些遗失的赋值。两个 0101 序列不同,当且仅当存在至少一个位置在两个序列中的取值不同。

请你求出同时符合全部记录的不同 0101 序列数量。答案可能很大,请对 998,244,353998{,}244{,}353 取模。

【输入格式】

从文件 assign.in\textbf{\textit{assign.in}} 中读入数据。

本题包含多组测试数据。

输入的第一行包含两个非负整数 c,Tc,T,分别表示测试点编号与测试数据的组数。c=0c=0 表示该测试点为样例。

对于每组测试数据:

第一行包含三个整数 n,k,mn,k,m,分别表示序列长度、连续区间长度与序列中 11 的数量。

第二行包含 nk+1n-k+1 个整数 s1,s2,,snk+1s_1,s_2,\ldots,s_{n-k+1},表示每个长度为 kk 的连续区间的元素之和。

【输出格式】

输出到文件 assign.out\textbf{\textit{assign.out}} 中。

对于每组测试数据,输出一行一个非负整数,表示符合记录的不同 0101 序列数量对 998,244,353998{,}244{,}353 取模后的结果。

【样例 1 输入】

0 24 2 21 1 15 2 32 1 1 1

【样例 1 输出】

21

【说明/提示】

【样例 1 解释】

对于第一组测试数据,符合记录的序列为 (0,1,0,1)(0,1,0,1)(1,0,1,0)(1,0,1,0)

对于第二组测试数据,只有序列 (1,1,0,1,0)(1,1,0,1,0) 符合记录。

【样例 2】

见选手目录下的 assign/assign2.in\textbf{\textit{assign/assign2.in}}assign/assign2.ans\textbf{\textit{assign/assign2.ans}}

该组样例符合测试点 121\sim2 的数据范围。

【样例 3】

见选手目录下的 assign/assign3.in\textbf{\textit{assign/assign3.in}}assign/assign3.ans\textbf{\textit{assign/assign3.ans}}

该组样例符合测试点 353\sim5 的数据范围。

【样例 4】

见选手目录下的 assign/assign4.in\textbf{\textit{assign/assign4.in}}assign/assign4.ans\textbf{\textit{assign/assign4.ans}}

该组样例符合测试点 696\sim9 的数据范围。

【样例 5】

见选手目录下的 assign/assign5.in\textbf{\textit{assign/assign5.in}}assign/assign5.ans\textbf{\textit{assign/assign5.ans}}

该组样例符合测试点 101510\sim15 的数据范围。

【样例 6】

见选手目录下的 assign/assign6.in\textbf{\textit{assign/assign6.in}}assign/assign6.ans\textbf{\textit{assign/assign6.ans}}

该组样例符合测试点 162016\sim20 的数据范围。

\newpage

【数据范围】

对于 100%100\% 的数据,保证 1kn1061\leq k\leq n\leq10^6,单个测试点内所有测试数据满足 n106\sum n\leq10^6

测试点编号nn特殊性质
1,21,2n20n\leq20
353\sim5n106n\leq10^6A
696\sim9n103n\leq10^3
101510\sim15n106n\leq10^6B
162016\sim20n106n\leq10^6

特殊性质 A:保证 k20k\leq20

特殊性质 B:保证 nnkk 的倍数。

对于所有测试数据,保证:

  • 0c200\leq c\leq201T101\leq T\leq10
  • 0mn0\leq m\leq n
  • 对于所有 1ink+11\leq i\leq n-k+1,均有 0sik0\leq s_i\leq k

【题解】

已公开 1 篇题解,官方题解会优先显示。

查看题解