#P12519. [OOI 2023 Day 2]子串小问题

[OOI 2023 Day 2]子串小问题

题目描述

菲利普非常喜欢解决与字符串相关的问题。他已经解决了所有他知道的字符串问题,但仍觉得不够。于是,菲利普决定自己设计一个新的字符串问题。

为此,他选取了一个字符串 tt 和一个包含 nn 个字符串的集合 s1,s2,s3,,sns_1, s_2, s_3, \ldots, s_n。菲利普有 mm 个查询,在第 ii 个查询中,他希望从字符串 tt 中提取从第 lil_i 个到第 rir_i 个字符的子串,并计算其中与集合中某个字符串相同的子串数量。更正式地说,菲利普希望计算满足 liabril_i \le a \le b \le r_i 的位置对 (a,b)(a, b) 数量,其中 tt 从第 aa 个到第 bb 个字符的子串与集合中的某个字符串 sjs_j 完全一致。

字符串 tt 从第 aa 个到第 bb 个字符的子串是指通过删除 tt 的前 a1a-1 个字符和后 tb|t|-b 个字符得到的字符串,其中 t|t| 表示字符串 tt 的长度。

菲利普已经解决了这个问题,你能解决吗?

输入格式

第一行包含两个正整数 nnmm (1n,m500000)(1 \le n, m \le 500000),分别表示集合中的字符串数量和查询数量。

第二行包含一个字符串 tt (1t5106)(1 \le |t| \le 5 \cdot 10^{6}),由小写英文字母组成。

接下来的 nn 行描述集合中的字符串。第 ii 行包含一个字符串 sis_i,由小写英文字母组成。设 SS 为集合中所有字符串的总长度。保证 S106S \le 10^{6},且所有字符串 sis_i 互不相同。

接下来的 mm 行描述查询。第 ii 行包含两个正整数 lil_irir_i (1lirit)(1 \le l_i \le r_i \le |t|),表示第 ii 个查询中 tt 的子串的左边界和右边界。

输出格式

在一行中输出 mm 个整数,第 ii 个整数为第 ii 个查询的答案。

3 5
abacaba
aba
a
ac
1 7
1 3
2 7
2 5
4 5

7 3 5 3 1

4 4
abcdca
ab
ca
bcd
openolympiad
1 5
2 2
2 6
1 6

2 0 2 3

数据范围与提示

详细子任务附加限制及分值如下表所示。其中子任务 00 是样例。

子任务 分值 附加限制 子任务依赖 备注
11 1010 n100,m100,t100n \leq 100, m \leq 100, \vert t\vert \leq 100, S10000S \leq 10000 00
22 1212 n100,m500,t5000n \leq 100, m \leq 500, \vert t\vert \leq 5000 0,10, 1
33 77 n5000,t5000n \leq 5000, \vert t\vert \leq 5000 0,1,20, 1, 2
44 88 n100,t50000n \leq 100, \vert t\vert \leq 50000 0,1,20, 1, 2
55 1212 t100000,S100000\vert t\vert \leq 100000, S \leq 100000 0,10, 1
66 88 t250000,S100000\vert t\vert \leq 250000, S \leq 100000 0,1,50, 1, 5
77 77 t500000,S100000\vert t\vert \leq 500000, S \leq 100000 0,1,5,60, 1, 5, 6
88 77 t750000,S100000\vert t\vert \leq 750000,S \leq 100000 0,1,5,6,70, 1, 5, 6, 7
99 2929 080 \sim 8