P1004流光之歌song

时间限制 1000 ms内存限制 512 MiB通过率 —
显示算法标签字符串 · 动态规划 · 字符串哈希 · 后缀数组

【题目背景】

传说 Gioush 大队有一个歌魔,喜欢以唱歌作乐,每天夜里,都会出现在 Gioush 大队营地中,高声唱响他最喜欢的歌。然而,他的声音太过巨大,又太过于有杀伤力,以至于将路过的流光信使给斩落了,还使其负了很重的伤。坠落造成了巨大的响动,这下 Gioush 大队的成员都睡不安宁了,他们思忖着怎么才能将流光信使送回天上,毕竟人家做一个信使也是十分不容易的。

【题目描述】

为了排查出谁是隐藏在 Gioush 营地 nn 个成员中的歌魔,来让他去给流光信使道歉,他们开始了排查。

从小对声音敏感的 RAINBOW_ddd 指出,可以把声音转化成很多段信号来与歌魔的声音作比较,来判断究竟谁是歌魔。于是,RAINBOW_ddd 趁着夜晚偷偷放置了一个录音机在 Gioush 营地中,成功地记录下来了歌魔的声音。我们把该段声音抽象成一个只包含小写字符的字符串,这样我们就可以具象化声音的属性了。为了鉴别歌魔,他们每个人都学习了歌魔最爱唱的那首歌,Ehundategh 将每个人唱这首歌的声音记录了下来。

lava__44 作为声音方面的专家,为了进一步具象化每个人声音的相似程度,她定义,两段声音 (S,T)(S,T) 的相似程度 f(S,T)f(S,T) 即为:两段声音的最长公共前缀,即为——一个最大的 xx 使得 Si=Ti( 1ix)S_i=T_i(\forall\ 1\le i\le x),这样就可以比较每个人的声音了。

但是开始录制每个成员的声音的时候,歌魔为了掩藏自己的踪迹,对录音机做了手脚,他使录音机记录的音波出现了紊乱,也就是说,每一段记录的声音都会有 ll 的前缀长度是不可用的。具体来说,假设 l=2l=2,那么对于 abcbc\texttt{abcbc} 这个字符串来说,ab\texttt{ab} 这个子串是不可用的。

Ehundategh 提出了 qq 个假设,每次他假设有 lil_i 的前缀长度不可用,他想知道,在这种情况下,和歌魔声音最像的声音是哪一个,也就是与歌魔声音相似程度最大的是哪一个(当然,我们在比较声音的时候不可用的部分不参与前缀的比较),如果有多个一样的,只需要输出编号最小的那一个即可。

【输入格式】

从文件 song.in\textbf{\textit{song.in}} 中读入数据。

第一行一个小写字符串 TT,表示歌魔的声音。

第二行两个整数 n,qn,q,表示营地中有 nn 个成员,Ehundategh准备了 qq 个假设。

接下来 nn 行,每行一个小写字符串 SiS_i,表示第 ii 个成员的录音。

接下来 qq 行,每行一个整数 lil_i,表示第 ii 个假设中有长度为 lil_i 的前缀不可用。

【输出格式】

输出到文件 song.out\textbf{\textit{song.out}} 中。

qq 行,每行一个整数表示和歌魔声音最像的成员编号。

【样例 1 输入】

abcbc2 3abccccbcbc023

【样例 1 输出】

122

【样例 2 输入】

ehundategh4 5magiclyneyimmortalpunnfyeeeeqqqda01234

【样例 2 输出】

41131

【说明/提示】

【样例 3】

见选手目录下的 song/song3.in\textbf{\textit{song/song3.in}}song/song3.ans\textbf{\textit{song/song3.ans}}

该组样例符合测试点 132013\sim 20 的数据范围。

【数据范围】

测试点编号nnqqS\sum\lvert S\rvertT\lvert T\rvert
161\sim 610\leq 101000\leq 10001000\leq 10001000\leq 1000
7127\sim 12=2=21000\leq 1000106\leq 10^6106\leq 10^6
132013\sim 2010\leq 10105\leq 10^5106\leq 10^6106\leq 10^6

【题解】

已公开 1 篇题解,官方题解会优先显示。

查看题解