QOJ.ac

QOJ

حد الوقت: 1 s حد الذاكرة: 2048 MB مجموع النقاط: 100

#2937. CIDR

الإحصائيات

互联网协议 (IP) V4 地址是 32 位整数,用于唯一标识互联网上的主机。IP 地址以点分十进制(dotted-quad)表示法书写,例如 192.168.1.100。点分十进制的每个分量指定一个 8 位(无符号)值,对应于 32 位整数地址中的 4 个字节。一个 IP 地址在 32 位整数中指定了两组位:网络组和主机组。地址中的最低有效位指定了由最高有效位所描述的网络上的特定主机。

网络掩码(network mask)是一个位掩码,它将网络组中的所有位设置为 1。例如,如果网络组有 14 位,则网络掩码为 0xfffc0000,或者以点分十进制格式表示为 255.252.0.0

历史上,每个组由 8 位的倍数组成:8、16 或 24 位。这导致了 IP 地址分配的问题:网络总数对于大多数组织来说通常太大或太小。网络上的最小主机数为 256(8 位主机)。事实证明,这浪费了 IP 地址空间,因为小型网络很少需要约 256 台主机。

无类别域间路由(CIDR)的引入解决了这个问题。它允许网络组和主机组使用任意数量的位,只要网络组和主机组使用的总位数加起来为 32。CIDR 表示法指定一个点分十进制 IP 地址、一个斜杠('/')字符和一个十进制数字(0-32)。例如,192.168.1.100/14 表示 IP 地址 192.168.1.100 及其关联的网络前缀 192.128.0.0,或者等效地表示为具有 14 个前导 1 位的网络掩码 255.252.0.0

对于本题,你将编写一个程序,接收一个点分十进制 IP V4 地址列表,并确定包含所有指定 IP 地址且未使用或浪费的主机数量最少的网络组。

输入格式

输入的第一行包含一个十进制整数 $N$ ($2 \le N \le 65535$),表示后续点分十进制 IP 地址的数量。随后是 $N$ 行,每行包含一个有效的点分十进制 IP 地址。

输出格式

输出的单行包含一个整数值,表示网络组中的位数。即 CIDR 表示法中斜杠('/')字符后面的整数值。如果 IP 地址之间没有共同的网络组,则应输出 32,这是一种特殊情况,通常用于指代特定主机,即没有网络组件。这意味着你永远不应输出 0。

样例

样例输入 1

4
10.0.0.1
10.0.0.24
10.0.0.8
10.0.0.16

样例输出 1

27

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.