题目背景
原题链接:https://oier.team/problems/S6C。
题目描述
给定 n 个字符串 S1,…,Sn 以及一个字符串 T。
对于一个字符串 R,定义 ∣R∣ 表示 R 的长度、R[l,r] 表示 R 的第 l∼r 个字符组成的字符串。字符串 R′ 是字符串 R 的前缀当且仅当存在 1≤p≤∣R∣ 且 p 为整数使得 R′=R[1,p]。
定义一个字符串 R 是好的当且仅当它是某个 Si 的前缀或 R 为空。
对于若干字符串 R1,R2,…,Rk,定义 R1+R2+⋯+Rk 为 R1,R2,…,Rk 顺次拼接得到的字符串。
定义一个三元组 (l,r,k)(l,r,k 均为整数)是好的当且仅当 1≤l≤r≤∣T∣,1≤k≤K 且存在 k 个好的字符串 R1,R2,…,Rk 使得 R1+R2+⋯+Rk=T[l,r]。
请你求出好的三元组的数量,并对于每个 i 求出有多少好的三元组 (l,r,k) 满足 l≤i≤r。如果你只能求出两者中其一,也可以获得部分分数,见【输出格式】。
输入格式
第一行,三个非负整数 id,n,K,其中 id 表示测试点编号(所有样例满足 id=0),n 表示字符串数量,K 表示对好的三元组的限制。
接下来 n 行,每行一个字符串 Si。
接下来一行,一个字符串 T。
输出格式
第一行,一个非负整数,表示好的三元组的数量。
第二行,∣T∣ 个非负整数,第 i 个表示满足 l≤i≤r 的好的三元组 (l,r,k) 的数量。
本题使用自定义校验器进行评分,对于每个测试点:
- 如果你的程序正确地求出了好的三元组的数量并正确地对于每个 1≤i≤∣T∣ 求出了满足 l≤i≤r 的好的三元组 (l,r,k) 的数量,你可以获得该测试点 100% 的分数。
- 如果你的程序未能正确地求出了好的三元组的数量但正确地对于每个 1≤i≤∣T∣ 求出了满足 l≤i≤r 的好的三元组 (l,r,k) 的数量,你可以获得该测试点 80% 的分数。
- 如果你的程序正确地求出了好的三元组的数量但未能正确地对于每个 1≤i≤∣T∣ 求出了满足 l≤i≤r 的好的三元组 (l,r,k) 的数量,你可以获得该测试点 60% 的分数。
- 否则,你不能获得该测试点的任何分数。
注意,即使你希望获得某测试点 80% 或 60% 的分数,你也需要在第一行输出一个数并在第二行输出 ∣T∣ 个数。
提示
【样例解释 #1】
符合要求的 (l,r,k) 有以下 13 组:
- (1,1,1);
- (1,1,2);
- (1,2,1);
- (1,2,2);
- (1,3,2);
- (3,3,1);
- (3,3,2);
- (3,4,2);
- (3,5,2);
- (4,4,1);
- (4,4,2);
- (4,5,1);
- (4,5,2)。
【样例 #4】
见附件中的 string/string4.in
与 string/string4.ans
。
该组样例满足测试点 1∼3 的约束条件。
【样例 #5】
见附件中的 string/string5.in
与 string/string5.ans
。
该组样例满足测试点 4∼6 的约束条件。
【样例 #6】
见附件中的 string/string6.in
与 string/string6.ans
。
该组样例满足测试点 7∼10 的约束条件。
【样例 #7】
见附件中的 string/string7.in
与 string/string7.ans
。
该组样例满足测试点 13∼14 和测试点 16∼17 的约束条件。
【样例 #8】
见附件中的 string/string8.in
与 string/string8.ans
。
该组样例满足测试点 18∼20 的约束条件。
【数据范围】
对于所有测试数据,保证:1≤n≤10,1≤∣Si∣≤5×104,1≤∣T∣,K≤5×105,字符串仅包含小写英文字母 a∼z。
测试点编号 |
n≤ |
∣Si∣≤ |
∣T∣≤ |
K≤ |
特殊性质 |
1∼3 |
10 |
50 |
无 |
4∼6 |
100 |
300 |
7∼10 |
1000 |
5000 |
11∼12 |
5×104 |
5×105 |
1 |
13∼14 |
10 |
15 |
5×105 |
所有字符均为 a |
16∼17 |
所有字符在 {a,b} 中独立均匀随机生成 |
18∼20 |
无 |