#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。