QOJ.ac

QOJ

Límite de tiempo: 1.0 s Límite de memoria: 256 MB Puntuación total: 100

#15753. 最长前缀匹配

Estadísticas

在互联网中,路由器通过查询转发表来根据数据包的目的地址转发数据包。转发表为每个目的地址指定了数据包下一步应该走的路径(如果有的话)。目的地址是一个无符号整数。转发表包含许多不同的前缀(数千个),每个前缀是一个二元组 $(M, L)$,其中 $M$ 是一个地址掩码(一个无符号整数),$L$ 是一个表示掩码中有效位数(相关位数)的长度。如果目的地址 $D$ 的前 $L$ 个最高有效位与 $M$ 的前 $L$ 个最高有效位相同,则称目的地址 $D$ 与前缀 $(M, L)$ 匹配。

最长前缀匹配:每当一个数据包到达时,路由器必须在其数据库中找到与该数据包目的地址匹配的最长前缀。你需要为一个必须尽快转发数百万个数据包的路由器实现最长前缀匹配算法。

输入格式

第一行输入包含两个整数 $X$ 和 $Y$。$X$ 表示路由器转发表中的前缀数量,$Y$ 表示需要转发的数据包数量。

接下来的 $X$ 行描述这些前缀,每行描述一个前缀,包含一个十六进制表示的掩码,后跟一个十进制表示的长度。每个前缀的编号为其出现的行数减 $1$(即第一个前缀的 ID 为 $0$,第二个为 $1$,依此类推)。

接下来的 $Y$ 行给出需要转发的数据包的目的地址,每行一个数据包(地址也以十六进制给出)。

输出格式

输出包含 $Y$ 行。第 $k$ 行表示输入文件中第 $k$ 个地址的最长前缀匹配算法的结果。结果应当是匹配的最长前缀的编号,如果未找到匹配的前缀,则输出 -1。

样例

输入样例 1

5 5
0xFFFFFF00 24
0xFF000000 8
0xAF230000 16
0x3 31
0 0
0xFFFF0000
0xF0FF0000
0xFFFFFF00
0xAF320000
0x2

输出样例 1

1
4
0
4
3

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.