#P8947. Angels & Demons

    ID: 8091 远端评测题 2000ms 1024MiB 尝试: 0 已通过: 0 难度: 9 上传者: 标签>线段树2023洛谷原创后缀自动机,SAMO2优化

Angels & Demons

Description

给定 nn 个由小写字母组成的模板串 S1...nS_{1...n}qq 组询问,询问分为以下两种类型:

  1. 1 T:给定一个由小写字母组成的询问串 TT
  2. 2 p l r:设 num(p,l,r)num(p,l,r) 表示 SpS_p[l,r][l,r] 子串是多少个询问串的子串,求 maxi=1l(num(p,i,r))\max\limits_{i=1}^{l}(num(p,i,r))

Input Format

第一行,两个数 n,q,w0n,q,w_0,其中 w0w_0 表示数据类型。

  • w0=0w_0=0

    2n+12\sim n+1 行,每行一个字符串,第 i+1i+1 行表示 SiS_i

    接下来 qq 行,每行一组询问,格式如题。

  • w0=1w_0=1

    第二行,输入三个整数 A,B,CA,B,C

    接下来 nn 行,每行一个字符串,表示一个模板串。

    接下来,询问按照如下代码生成(代码中的 lst 表示上一次询问 22 的答案,初始时为 00le[i] 表示模板串 ii 的长度,s 是 char 数组):

while (q--) {
	int op;
	scanf("%d", &op);
	if (op == 1) {
		scanf("%s", s + 1);
		int x((1ll * A * lst + B) % C), l(strlen(s + 1));
		for (int i(1); i <= l; ++i) {
			swap(s[i], s[x % l + 1]);
			x = (1ll * A * x + B) % C;
		}
	} else {
		int p, l, r;
		scanf("%d%d%d", &p, &l, &r);
		int x((1ll * A * lst + B) % C);
		p = (p + x) % n + 1;
		x = (1ll * A * x + B) % C;
		l = (l + x) % le[p] + 1;
		x = (1ll * A * x + B) % C;
		r = (r + x) % le[p] + 1;
		if (l > r) swap(l, r);
		// 此处更新 lst
	}
}

Output Format

对于每个询问 22,输出一行一个整数表示答案。

5 11 0
abb
aab
baab
bbaa
aabbb
1 ab
2 1 1 3
2 2 2 3
1 ba
2 3 1 2
2 4 1 2
2 4 2 3
1 abb
2 5 2 4
2 1 1 3
2 1 1 2

0
1
1
0
1
1
1
2

5 11 1
114 514 1919810
abb
aab
baab
bbaa
aabbb
1 ab
2 1 1 3
2 2 2 3
1 ba
2 3 1 2
2 4 1 2
2 4 2 3
1 abb
2 5 2 4
2 1 1 3
2 1 1 2

0
0
1
0
0
1
1
0

Hint

对于 100%100\% 数据:1n,q1051\le n,q\le 10^5i=1nSi5×105\sum\limits_{i=1}^{n}|S_i|\le5\times10^5T5×105\sum|T|\le5\times10^51pn1\le p\le nw0{0,1}w_0\in\{0,1\}1A,B<C1091\le A,B<C\le10^9

测试点 分值 nn\le i=1nSi\sum\limits_{i=1}^{n}|S_i|\le qq\leq T\sum | T| \leq w0=w_0= 其他限制
11 33 2020 200200 200200 50005000 00
22 200200 20002000
33
44 5×1055\times10^5
55
66 11 5×1055\times10^5 22
77
88 44 10510^5 10510^5 10510^5 10510^5
99 33 字符串随机
1010 44 2×1052 \times 10^5 2×1052 \times 10^5
1111 33 字符串随机
1212 44 3×1053 \times 10^5 3×1053 \times 10^5
1313 33 字符串随机
1414 44 4×1054 \times 10^5 4×1054 \times 10^5
1515 33 字符串随机
1616 44 5×1055\times10^5 5×1055\times10^5
1717 33 字符串随机
1818 2×1052 \times 10^5
1919 3×1053 \times 10^5
2020 4×1054 \times 10^5
2121 5×1055\times10^5 字符串随机
2222
2323
2424
2525
2626 44 3×1053\times10^5 11
2727 4×1054\times10^5
2828 5×1055\times10^5
2929
3030

测试点 8178\sim 17 保证对于所有询问 22l=1l=1