#P2799. IP Networks
IP Networks
问题描述
Alex 是一个 IP 网络管理员。他的客户有一堆独立的 IP 地址,他决定将这些 IP 地址分组到尽可能小的 IP 网络中。
每个 IP 地址是一个 字节的数字,用十进制点分隔表示法 "byte0.byte1.byte2.byte3"
(引号仅用于清晰)。每个字节是一个从 到 (包括 和 )的十进制数字,没有多余的前导零。
IP 网络由两个 字节数字描述——网络地址和网络掩码。网络地址和网络掩码都使用与 IP 地址相同的表示法。
为了理解网络地址和网络掩码的含义,你需要考虑它们的二进制表示。IP 地址、网络地址和网络掩码的二进制表示由 位组成: 位用于 byte0
(最高有效位到最低有效位),接着是 位用于 byte1
,接着是 位用于 byte2
,最后是 位用于 byte3
。
IP 网络包含一个 个 IP 地址的范围,其中 。网络掩码在其二进制表示中总是有 个前导位设置为 1,n 个最后位设置为 0。网络地址在其二进制表示中有任意的 个前导位,n 个最后位设置为 。IP 网络包含所有 IP 地址,这些 IP 地址的 个前导位与网络地址的 个前导位相同, 个最后位可以是任意的。如果一个 IP 网络包含的 IP 地址比另一个 IP 网络少,则称这个 IP 网络更小。
例如,网络地址为 ,网络掩码为 的 IP 网络包含从 到 (包括)的 个 IP 地址。
输入
输入的第一行包含一个整数 。接下来的 行包含 IP 地址,每个地址占一行。每个 IP 地址在输入中可能出现多次。
输出
输出两行,描述包含所有给定 IP 地址的最小 IP 网络。第一行输出网络地址,第二行输出网络掩码。
示例输入 1
3
194.85.160.177
194.85.160.183
194.85.160.178
示例输出 1
194.85.160.176
255.255.255.248
来源
Northeastern Europe 2005