Description
给定 n 个由小写字母组成的模板串 S1...n,q 组询问,询问分为以下两种类型:
1 T:给定一个由小写字母组成的询问串 T。
2 p l r:设 num(p,l,r) 表示 Sp 的 [l,r] 子串是多少个询问串的子串,求 i=1maxl(num(p,i,r))。
第一行,两个数 n,q,w0,其中 w0 表示数据类型。
-
w0=0:
第 2∼n+1 行,每行一个字符串,第 i+1 行表示 Si。
接下来 q 行,每行一组询问,格式如题。
-
w0=1:
第二行,输入三个整数 A,B,C。
接下来 n 行,每行一个字符串,表示一个模板串。
接下来,询问按照如下代码生成(代码中的 lst 表示上一次询问 2 的答案,初始时为 0,le[i] 表示模板串 i 的长度,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
}
}
对于每个询问 2,输出一行一个整数表示答案。
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% 数据:1≤n,q≤105,i=1∑n∣Si∣≤5×105,∑∣T∣≤5×105,1≤p≤n,w0∈{0,1},1≤A,B<C≤109。
| 测试点 |
分值 |
n≤ |
i=1∑n∣Si∣≤ |
q≤ |
∑∣T∣≤ |
w0= |
其他限制 |
| 1 |
3 |
20 |
200 |
200 |
5000 |
0 |
无 |
| 2 |
200 |
2000 |
| 3 |
| 4 |
5×105 |
| 5 |
| 6 |
1 |
5×105 |
2 |
| 7 |
| 8 |
4 |
105 |
105 |
105 |
105 |
| 9 |
3 |
字符串随机 |
| 10 |
4 |
2×105 |
2×105 |
无 |
| 11 |
3 |
字符串随机 |
| 12 |
4 |
3×105 |
3×105 |
无 |
| 13 |
3 |
字符串随机 |
| 14 |
4 |
4×105 |
4×105 |
无 |
| 15 |
3 |
字符串随机 |
| 16 |
4 |
5×105 |
5×105 |
无 |
| 17 |
3 |
字符串随机 |
| 18 |
2×105 |
无 |
| 19 |
3×105 |
| 20 |
4×105 |
| 21 |
5×105 |
字符串随机 |
| 22 |
无 |
| 23 |
| 24 |
| 25 |
| 26 |
4 |
3×105 |
1 |
| 27 |
4×105 |
| 28 |
5×105 |
| 29 |
| 30 |
测试点 8∼17 保证对于所有询问 2,l=1。