QOJ.ac

QOJ

実行時間制限: 3.0 s メモリ制限: 64 MB 満点: 160

#16403. 糕点师

統計

组织信息学竞赛对 Mirko 来说并没有带来太多利润,因此他开了一家冰淇淋和糕点店。他的生意一直很红火,直到有一天,欧盟卫生检查员决定对他进行访问。

一项新的指令规定了 $M$ 种禁用成分,这些成分即使在极微量的情况下也不能出现在食品中。每种成分都有一个由数字 0 到 9 组成的序列号。每个食品包装上的声明都列出了该食品中所含成分的所有序列号。

Mirko 必须检查他的任何产品是否在其声明中列出了禁用的成分序列号。然而,一如既往地笨拙和粗心的 Mirko 决定将所有序列号拼接成一个长度为 $N$ 的长数字,并相信这会使他的工作更轻松。他从朋友 Slavko 那里借了一个机器人。该机器人被编程为检查序列号 $A$ 是否包含另一个序列号 $B$ 作为子串。让我们用 $L$ 表示 $B$ 的长度。机器人按如下方式进行搜索:

  • 首先,它将 $A$ 中从位置 1 到位置 $L$ 的片段与 $B$ 中的数字逐位进行比较。当发现不同的数字或确定片段相等时,停止比较。如果片段相等,则停止搜索并报告匹配。
  • 如果片段不相等,则对从位置 2 到 $L+1$ 的片段重复上述过程。如果这些片段也不相等,则继续对片段 3 到 $L+2$、4 到 $L+3$ 等进行搜索。
  • 如果机器人没有足够的数字来获取长度为 $L$ 的完整片段(例如,在长度为 8 的序列号中从第 5 个字符开始,需要一个长度为 6 的片段),它将用 '#' 字符填充该片段。例如,"563232" 从位置 4 到位置 10 的片段是 "232####"。
  • 如果机器人到达了序列号的末尾(已经尝试了所有 $N$ 个片段)而没有找到 $B$,则报告未找到匹配。

机器人每比较两个数字需要一秒钟,而 Slavko 按每秒一美元向 Mirko 收取使用机器人的费用。

请帮助 Mirko 确定他需要支付给 Slavko 多少钱来进行模式匹配!

输入格式

输入的第一行包含一个正整数 $N$($1 \le N \le 100\,000$),表示长序列号的长度。

第二行包含 $N$ 个 0 到 9 之间的数字,表示该长序列号。

第三行包含一个正整数 $M$($1 \le M \le 50\,000$),表示禁用成分的数量。

接下来的 $M$ 行,每行包含一个禁用成分的序列号。

单个禁用成分序列号的长度不会超过 $100\,000$。

所有禁用成分序列号的总长度不会超过 $3\,000\,000$。

输出格式

输出 $M$ 个整数,每行一个。第 $i$ 行必须包含 Mirko 为搜索第 $i$ 个成分序列号而需要支付给 Slavko 的美元金额。

子任务

在占总分至少 20% 的测试数据中,满足以下限制条件:

  • $1 \le N \le 1000$
  • $1 \le M \le 500$
  • 单个禁用成分序列号的长度不超过 1000

样例

输入样例 1

7
1090901
4
87650
0901
109
090

输出样例 1

7
10
3
4

输入样例 2

10
5821052680
4
210526
2105
582
105268

输出样例 2

8
6
3
9

输入样例 3

3
001
1
11

输出样例 3

4

说明

第一个样例的解释:

  • 第一个序列号:机器人在每个片段中都发现第一个数字不同——总共进行了 7 次比较。
  • 第二个序列号:尝试第一个位置,立即发现不同(1 次比较)。尝试第二个位置,在第四个数字处发现不同(4 次比较)。尝试第三个位置,立即发现不同(1 次比较)。尝试第四个位置,找到匹配(4 次比较)。总计:10 次比较。
  • 第三个序列号:立即找到匹配(3 次比较)。
  • 第四个序列号:在第二个位置找到匹配($1 + 3 = 4$ 次比较)。

第三个样例的解释:

机器人依次将序列号 '11' 与片段 '00'(1 次比较)、'01'(1 次比较)和 '1#'(2 次比较)进行比较。总计:4 次比较。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.