#P11291. 【MX-S6-T3】「KDOI-11」简单的字符串问题 2

    ID: 10778 Type: RemoteJudge 2000ms 512MiB Tried: 0 Accepted: 0 Difficulty: 6 Uploaded By: Tags>字符串贪心倍增Special JudgeO2优化哈希, hash前缀和KMP

【MX-S6-T3】「KDOI-11」简单的字符串问题 2

题目背景

原题链接:https://oier.team/problems/95

题目描述

给定 nn 个字符串 S1,,SnS_1, \ldots, S_n 以及一个字符串 TT

对于一个字符串 RR,定义 R|R| 表示 RR 的长度、R[l,r]R_{[l,r]} 表示 RR 的第 lrl\sim r 个字符组成的字符串。字符串 RR' 是字符串 RR 的前缀当且仅当存在 1pR1\leq p\leq |R|pp 为整数使得 R=R[1,p]R'=R_{[1,p]}

定义一个字符串 RR好的当且仅当它是某个 SiS_i 的前缀 RR 为空

对于若干字符串 R1,R2,,RkR_1,R_2,\dots,R_k,定义 R1+R2++RkR_1+R_2+\dots+R_kR1,R2,,RkR_1,R_2,\dots,R_k 顺次拼接得到的字符串。

定义一个三元组 (l,r,k)(l,r,k)l,r,kl,r,k 均为整数)是好的当且仅当 1lrT1\leq l\leq r\leq|T|1kK1\leq k\leq K 且存在 kk好的字符串 R1,R2,,RkR_1,R_2,\dots,R_k 使得 R1+R2++Rk=T[l,r]R_1+R_2+\dots+R_k=T_{[l,r]}

请你求出好的三元组的数量,并对于每个 ii 求出有多少好的三元组 (l,r,k)(l,r,k) 满足 lirl\leq i\leq r。如果你只能求出两者中其一,也可以获得部分分数,见【输出格式】。

输入格式

第一行,三个非负整数 id,n,Kid,n,K,其中 idid 表示测试点编号(所有样例满足 id=0id=0),nn 表示字符串数量,KK 表示对好的三元组的限制。

接下来 nn 行,每行一个字符串 SiS_i

接下来一行,一个字符串 TT

输出格式

第一行,一个非负整数,表示好的三元组的数量。

第二行,T\lvert T\rvert 个非负整数,第 ii 个表示满足 lirl\leq i\leq r 的好的三元组 (l,r,k)(l,r,k) 的数量。

本题使用自定义校验器进行评分,对于每个测试点:

  • 如果你的程序正确地求出了好的三元组的数量并正确地对于每个 1iT1\leq i\leq |T| 求出了满足 lirl\leq i\leq r 的好的三元组 (l,r,k)(l,r,k) 的数量,你可以获得该测试点 100%100\% 的分数。
  • 如果你的程序未能正确地求出了好的三元组的数量但正确地对于每个 1iT1\leq i\leq |T| 求出了满足 lirl\leq i\leq r 的好的三元组 (l,r,k)(l,r,k) 的数量,你可以获得该测试点 80%80\% 的分数。
  • 如果你的程序正确地求出了好的三元组的数量但未能正确地对于每个 1iT1\leq i\leq |T| 求出了满足 lirl\leq i\leq r 的好的三元组 (l,r,k)(l,r,k) 的数量,你可以获得该测试点 60%60\% 的分数。
  • 否则,你不能获得该测试点的任何分数。

注意,即使你希望获得某测试点 80%80\%60%60\% 的分数,你也需要在第一行输出一个数并在第二行输出 T\lvert T\rvert 个数。

0 1 2
ab
abaab
13
5 3 5 6 3
0 3 2
abc
ac
b
bacabcab
27
4 9 6 11 10 5 6 5
0 10 10
wooogpgpoo
owpwgwwp
ooogpgpooo
gppwppgwoo
wooogpgpoo
wowooogpgp
gwwp
ggggogwgpp
wowooogpgp
pgpoooowpw
pgwgwggggggogwgppwppgwooggoogwowooogpgpoooowpwgwwp
7698
183 390 577 792 990 1213 1422 1651 1780 1889 1984 2099 2235 2355 2491 2458 2435 2426 2439 2466 2478 2498 2503 2489 2481 2477 2477 2483 2491 2527 2532 2559 2571 2540 2489 2433 2372 2276 2163 2041 1932 1803 1662 1491 1308 1111 900 702 486 252

提示

【样例解释 #1】

符合要求的 (l,r,k)(l,r,k) 有以下 1313 组:

  • (1,1,1)(1,1,1)
  • (1,1,2)(1,1,2)
  • (1,2,1)(1,2,1)
  • (1,2,2)(1,2,2)
  • (1,3,2)(1,3,2)
  • (3,3,1)(3,3,1)
  • (3,3,2)(3,3,2)
  • (3,4,2)(3,4,2)
  • (3,5,2)(3,5,2)
  • (4,4,1)(4,4,1)
  • (4,4,2)(4,4,2)
  • (4,5,1)(4,5,1)
  • (4,5,2)(4,5,2)

【样例 #4】

见附件中的 string/string4.instring/string4.ans

该组样例满足测试点 131\sim3 的约束条件。

【样例 #5】

见附件中的 string/string5.instring/string5.ans

该组样例满足测试点 464\sim6 的约束条件。

【样例 #6】

见附件中的 string/string6.instring/string6.ans

该组样例满足测试点 7107\sim10 的约束条件。

【样例 #7】

见附件中的 string/string7.instring/string7.ans

该组样例满足测试点 131413\sim14 和测试点 161716\sim17 的约束条件。

【样例 #8】

见附件中的 string/string8.instring/string8.ans

该组样例满足测试点 182018\sim20 的约束条件。

【数据范围】

对于所有测试数据,保证:1n101\leq n\leq101Si5×1041\leq |S_i|\leq5\times10^41T,K5×1051\leq |T|,K\leq5\times10^5,字符串仅包含小写英文字母 az\texttt{a}\sim\texttt{z}

测试点编号 nn\leq Si\lvert S_i\rvert\leq T\lvert T\rvert\leq KK\leq 特殊性质
131\sim3 1010 5050
464\sim6 100100 300300
7107\sim10 10001000 50005000
111211\sim12 5×1045\times10^4 5×1055\times10^5 11
131413\sim14 1010
1515 5×1055\times10^5 所有字符均为 a\texttt{a}
161716\sim17 所有字符在 {a,b}\{\texttt{a},\texttt{b}\} 中独立均匀随机生成
182018\sim20