QOJ.ac

QOJ

مجموع النقاط: 100

#9466. 域

الإحصائيات

Vivy 发现有些域名通过不同的 VPN(虚拟专用网络)访问速度更快。因此,她决定建立一个系统,自动将请求转发到不同的 VPN。

首先,她需要进行配置。

配置中包含多条规则。规则的格式为:[域名模式] [VPN 名称]。如果一个域名匹配某条规则的 [域名模式],我们就说该域名匹配这条规则,并且所有对该域名的访问都应转发到 [VPN 名称]

为了简化配置,Vivy 决定使用两种通配符,即 *#*# 都可以匹配任何由小写字母、数字、点号和连字符(-)组成的字符串。但是,域名仅在不匹配任何其他规则时,才匹配带有 # 通配符的规则。

一个域名模式是合法的,当且仅当它满足以下所有条件: 1. 域名模式由通配符、小写字母、数字、点号和连字符组成。 2. 域名模式不以点号开头,也不以点号结尾。 3. 域名模式中任意两个点号不相邻。 4. 如果存在通配符,则通配符必须位于域名模式的开头。且通配符后必须紧跟一个 .,或者后面没有任何字符。 5. 域名模式中的连字符必须位于两个小写字母之间。

一个 VPN 名称是合法的,当且仅当它满足以下所有条件: 1. VPN 名称由小写字母、数字和连字符组成。 2. VPN 名称以小写字母开头。 3. VPN 名称中的连字符必须位于两个小写字母之间。

两条规则被视为冲突,如果它们满足以下任一条件: 1. 存在一个不含通配符的域名,可以同时匹配这两条规则。例如,如果规则 A 的域名模式是 *.cn,规则 B 的域名模式是 a.cn,那么规则 A 和规则 B 冲突,因为域名 a.cn 可以同时匹配它们。 2. 其中一条规则因为另一条规则的存在而永远无法被匹配。例如,如果另一条规则是 *.cn,则 #.pku.cn 永远无法被匹配。

一条规则被视为无效,如果它满足以下任一条件: 1. 具有非法的域名模式。 2. 具有非法的 VPN 名称。 3. 与出现在它之前的某条有效规则冲突。

现在她想编写一个程序来解析这些配置,并确定有多少条规则是无效的。

此外,她还想了解更多信息。一个不含 # 通配符的有效域名模式可以代表一组域名。她想知道,给定一组域名,有多少条有效规则匹配该集合,即有多少条规则满足:存在一个不含通配符的域名属于该集合且匹配该规则。

输入格式

输入包含多组测试数据,最多 10 组。 对于每组测试数据: 第一行包含一个整数 $N$,表示规则的数量。($1 \le N \le 50000$) 接下来 $N$ 行,每行包含两个由空格分隔的字符串,分别表示规则的域名模式和 VPN 名称。 规则中字符串的总长度不超过 $1100000$。 下一行包含一个整数 $M$,表示查询的数量。($1 \le M \le 50000$) 接下来 $M$ 行,每行包含一个表示一组域名的域名模式。 对于每个查询,你需要回答有多少条有效规则匹配该集合。保证给定的域名模式是合法的,且不包含 # 通配符。 查询中字符串的总长度不超过 $1100000$。

输出格式

对于每组测试数据: 第一行包含一个整数,表示无效规则的数量。 接下来 $M$ 行,每行是一个整数,表示对应查询匹配的有效规则数量。

样例

输入 1

11
a.c a.c
poj.org vpn-china
www.pku.edu.cn vpn-pku1
mail.pku.edu.cn vpn-pku1
*.test.pku.edu.cn vpn-pku2
*.test.pku.edu.cn vpn-pku2
*.a.test.pku.edu.cn vpn-pku2
*.test2.pku.edu.cn vpn-pku2
*.pku.edu.cn vpn-pku2
#.pku.edu.cn vpn-pku0
#.www.pku.edu.cn vpn-pku0
5
a.c
mail.pku.edu.cn
*.test.pku.edu.cn
*.pku.edu.cn
*

输出 1

5
0
1
1
5
6

说明

总共有五条无效规则: 1. a.c a.c 无效,因为 a.c 不是合法的 VPN 名称。 2. 第二条 *.test.pku.edu.cn vpn-pku 无效,因为它与 *.test.pku.edu.cn 冲突。 3. *.a.test.pku.edu.cn vpn-pku 无效,因为它与 *.test.pku.edu.cn 冲突。 4. *.pku.edu.cn vpn-pku 无效,因为它与多条有效规则冲突。 5. #.www.pku.edu.cn vpn-pku0 无效,因为它与 #.pku.edu.cn 冲突。

对于查询: 1. a.c 不匹配任何规则。 2. mail.pku.edu.cn 不匹配 #.pku.edu.cn,因为它匹配 mail.pku.edu.cn。 3. *.test.pku.edu.cn 仅匹配 *.test.pku.edu.cn。 4. *.pku.edu.cn 可能匹配除 poj.org 之外的所有有效规则。更具体地说,*.pku.edu.cn 包含 www.pku.edu.cnmail.pku.edu.cna.test.pku.edu.cna.test2.pku.edu.cna.pku.edu.cn。它们分别匹配 www.pku.edu.cnmail.pku.edu.cn*.test.pku.edu.cn*.test2.pku.edu.cn#.pku.edu.cn。 5. * 可能匹配所有有效规则。

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.