D. 徐老师的弱循环节(cycle)

    传统题 2000ms 512MiB

徐老师的弱循环节(cycle)

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目描述

徐老师最近在学习 HashHash 算法,HashHash 算法有一个经典的应用就是进行字符串匹配求一个字符串的循环节长度。

于是徐老师准备自己生成一些字符串当做测试数据,测试代码是否正确

他会先自己随机写一个仅包含大小写字母的字符串 SS

然后用以下代码依次生成一个字符串序列 A0AnA_0 \sim A_n

int n = S.size();
A[0] = "";
for (int i = 1; i <= n; ++i){
	if (S[i - 1] >= 'A' && S[i - 1] <= 'Z'){
		A[i] = A[i - 1] + char(S[i - 1] + 32);
	} else {
		A[i] = S[i - 1] + A[i - 1];
	}
}

但是徐老师觉得求循环节太简单了,于是他设计了一个新的概念——弱循环节

对于一个字符串 BB 来说,一个整数 lenlen 如果满足对于任意 Bi=Bi+len(1iBlen)B_i = B_{i+len}(1 \leq i \leq |B| - len),那么就认为 lenlenBB 的一个弱循环节,一个字符串可能有多个弱循环节

例如 ABCABABCAB 的弱循环节有两个,分别是 3355

单纯求字符串的弱循环节也还是过于简单了

于是徐老师会给出一个序列 a1ama_1 \sim a_m,并给出 TT 次询问

ii 次询问徐老师会给出三个整数 li,ri,posil_i, r_i, pos_i,你的任务是在 aa 序列中找出一个 axa_x 满足 x[li,ri]x \in [l_i,r_i]axa_xAposiA_{pos_i} 的弱循环节,如果有多个满足条件的 axa_x 请输出最小的 axa_x(数值最小而不是 xx 最小)

输入格式

输入第一行包含一个字符串 SS,保证仅由大小写字母组成

输入第二行包含一个整数 mm,表示序列 aa 的长度

输入第三行包含 mm 个整数,分别表示 aia_i

输入第四行包含一个整数 TT,表示询问次数

接下来 TT 行,每行包含三个整数 posi,li,ripos_i,l_i,r_i,表示一次询问

输出格式

对于每次询问,输出一个整数,表示第 ii 次询问的答案,如果不存在符合条件的 axa_x,则输出 "No answer!"

数据范围

对于 20%20\% 的数据满足 n,m,T100n,m,T \leq 100

对于另外 20%20\% 的数据满足 rili100r_i - l_i \leq 100

对于另外 20%20\% 的数据满足 aa 序列单调不减

对于 100%100\% 的数据满足 1n,m,T5000001 \leq n,m,T \leq 500000,1ai,posin,1lirim 1 \leq a_i,pos_i \leq n,1\leq l_i \leq r_i \leq m

样例输入

AABAAba
9
4 3 2 1 7 5 3 6 1
6
1 4 4
2 1 4
2 1 3
3 3 5
5 4 7
7 8 9

样例输出

1
1
2
No answer!
3
6

样例解释

对于A序列分别为
A[1] = a
A[2] = aa
A[3] = aab
A[4] = aaba
A[5] = aabaa
A[6] = baabaa
A[7] = abaabaa

对于第一次询问,A[1]=aA[1]=a,所以满足条件的弱循环节长度为 11 对于第二次询问,A[2]=aaA[2]=aa,所以满足条件的弱循环节长度为 121,2,最小的是 11 对于第三次询问,满足条件的只有 22,所以答案是 22


CSP-S赛前模拟测试1

未参加
状态
已结束
规则
IOI
题目
4
开始于
2025-10-23 14:30
结束于
2025-10-23 15:30
持续时间
1 小时
主持人
参赛人数
20