P6540 [COCI 2013/2014 #1] SLASTIČAR

题目背景

你需要比较一些序列号。

题目描述

现有 $M$ 个由数字 $0$ 到 $9$ 组成的短序列号和一个长度为 $N$ 的长序列号。 检查序列号 $A$ 是否包含长度为 $L$ 的序列号 $B$ 的过程如下: - 将 $A$ 从位置 $1$ 到 $L$ 逐位与 $B$ 比较,一找到不同就将搜索段整体向后移,如果确定相等则停止比较。 - 将搜索段后移意为把 $x$ 到 $y$ 的搜索区域后移为 $x+1$ 和 $y+1$。 - 若剩下用于比较的位数不够,则在字符串末尾填充 `#`。如字符串为 `563232`,从位置 $4$ 到 $10$ 的填充为 `232####`。 - 若尝试了所有段均不匹配则停止比较。 对于每个短序列号,输出停止比较前比较的次数。

输入格式

输入的第一行是正整数 $N$。 输入的第二行是一个长度为 $N$ 的长序列号。 输入的第三行包含正整数 $M$。 接下来 $M$ 行每行包含一个长度不超过 $10^5$ 的短序列号。 短序列号总长度不超过 $3\times 10^6$。

输出格式

输出 $M$ 个整数,即对于第 $i$ 个短序列号所需的比较次数。

说明/提示

#### 【数据规模与约定】 - 对于 $20\%$ 的数据,$1\le N\le 10^3$,$1\le M\le 500$,任意短序列号长度均不超过 $10^3$。 - 对于 $100\%$ 的数据,满足 $1\le N\le 10^5$,$1\le M\le 5\times 10^4$。 - 对于任意序列号中的一位字符 $c$,满足 $c\in\{0,1,2,3,4,5,6,7,8,9 \}$。 #### 【样例解释】 #### 样例 1 解释 第一个序列号: - 机器人为每个段查找不同的第一位数字,总共进行 $7$ 次比较。 第二个序列号: - 尝试第一个位置,立即发现差异,$1$ 次比较。 - 尝试第二个位置,找到第四个数字的差异,$4$ 次比较。 - 尝试第三个位置,立即找到差异,$1$ 次比较。 - 尝试第四个位置,找到匹配,$4$个比较。 - 总计 $10$ 次比较。 第三序列号: - 立即找到匹配项,总计 $3$ 个比较。 第四个序列号: - 在第二个位置找到匹配项,总计 $1+3=4$ 个比较。 #### 样例 3 解释 按顺序将序列号 `11` 与段 `00`,$1$ 次比较,`01`,$1$ 次比较,和`1#`,$2$ 次比较,总计 $4$ 次比较。 -------- #### 【说明】 **题目译自 [COCI2013-2014](https://hsin.hr/coci/archive/2013_2014/) [CONTEST #1](https://hsin.hr/coci/archive/2013_2014/contest1_tasks.pdf) _T6 SLASTIČAR_。**