#P16890. [URAL1829]Routing Tables
[URAL1829]Routing Tables
题目描述
现代计算机网络中的路由器会根据路由表转发数据包。
路由表的每一行由三个 IPv4 地址组成:
- 目标网络地址
d; - 子网掩码
m; - 网关地址
g。
IPv4 地址是一个 32 位整数,为了方便书写,将它分成 4 个字节,并以十进制形式用点号分隔。例如 192.168.24.0 对应一个 32 位二进制数。
保证所有掩码的二进制表示均为若干个连续的 1,后面跟若干个连续的 0。
对于一个目标地址 a,路由器先找出所有满足
d & m = a & m
的路由表项,其中 & 表示按位与。
在这些表项中,路由器选择掩码中 1 的数量最多的一项,也就是选择最长前缀匹配,并把数据包发送到该项指定的网关。
保证对于任意目标地址,最终被选择的路由表项至多只有一项。
如果对于任意目标地址 a,两张路由表都会把数据包发送到相同的网关,或者两张表都找不到可用路由,那么称这两张路由表等价。
请判断给出的两张路由表是否等价。
输入格式
首先输入第一张路由表的行数 n。
接下来 n 行,每行包含三个 IPv4 地址:
d m g
分别表示目标网络、子网掩码和网关。
随后以相同格式输入第二张路由表。
两张路由表的总行数不超过 65536。
输出格式
如果两张路由表等价,输出:
YES
否则输出:
NO
样例 1
4
192.168.0.0 255.255.255.0 192.168.14.1
192.168.1.0 255.255.255.0 192.168.14.1
192.168.2.0 255.255.255.0 192.168.14.2
192.168.3.0 255.255.255.0 192.168.14.2
2
192.168.0.0 255.255.252.0 192.168.14.1
192.168.2.0 255.255.254.0 192.168.14.2
YES
样例 2
1
192.168.0.0 255.255.255.0 192.168.14.1
2
192.168.0.0 255.255.255.0 192.168.14.1
172.16.0.0 255.255.0.0 172.16.0.1
NO
数据范围
- IPv4 地址均为 32 位无符号整数;
- 掩码一定是合法的网络前缀掩码;
- 两张表的路由项总数不超过
65536; - 原题时间限制:2 秒;
- 原题内存限制:64 MB。