#NCST202412F. 子网
子网
题目描述
winter_l 在经历了一次 XCPC
比赛后,突发奇想的将其中的一个网络题进行了修改,使其更加符合时代发展。
现在,给定一个 IPv6
的子网和若干个 IPv6
地址,请你帮 winter_l 判断每一个地址是否属于这个子网。如果属于,请输出 Yes
否则输出 No
。
IPv6
地址有以下规则:
-
IPv6
的 位地址每 位划分为一段,总共 段,每段用冒号隔开,这种表示方法叫做“冒号十六进制表示法”,如:fe80:0000:0001:0000:0440:44ff:1233:5678
。 -
有时候 IP 地址中有好多 ,就可以把两个冒号之间连续的一段 压缩为
::
,即用冒号表示,但是一个IP地址中只能有一个::
。 当存在多个连续的一段 时,压缩最长的一段,若长度相等则压缩最前面的一段。如:fe80:0000:0000:0000:0000:0000:0001:0000
fe80::0001:0000
。 -
当冒号之间的数字不满四位十六进制数时,可以省略前导零,如
fe80::0001:0000
fe80::1:0
。
简而言之就是,给你一个
IPv6
的网段,判断 个IP
是不是它的子网。
输入格式
第一行,一个 CIDR
格式表示的 IPv6
子网。
第二行,一个整数 ,为需要判断的 IP
地址的个数。
接下来 行,每一行是一个冒分十六进制表示的 IP
地址。
输出格式
行,每行为 Yes
或 No
,表示该地址是否属于给定的子网。
输入输出样例
::29F0:0:91BA:9DAF:A887:FAD6:0/64
8
::29F0:0:91BA:CE1F:343E:773D:204F
0:4DDA:0:F1B9:0:8856::
::29F0:0:91BA:3740:61F0:8183:2B55
0:D7D8:0:8754:A62D:CC68::
AC80:17BC:97EA::B0CC:0:0
D02B:0:2FFA::F60D:CA9C
0:8FC::7B0F:0:0:2953
::29F0:0:91BA:AF90:E8C4:46F2:8E4
Yes
No
Yes
No
No
No
No
Yes
::5119:CE57:731B:0:0:4368/96
4
::C4E7:768F:D0C2
::5119:CE57:731B:0:E3F:CF84
0:84B0:D291:0:4BB::96A9
F275::24A5:7128:99FD:3C19
No
Yes
No
No
提示
背景解析
IPv6
地址是一个 位的二进制数,通常由八个十六位组成,每个十六位可以表示的最大数值是 (即二进制的 ( 个 ))。冒分十六进制是表示 IP
地址的一种格式,它将地址的八个十六位组用冒号(:)分隔开来。每十六位组是一个介于 到 的十六进制数,因此称为冒分十六进制。
一个 IP
地址可以通过子网掩码分为网络号和主机号两部分,网络号相同的 IP
地址属于同一个子网。子网掩码是一个 位的二进制数,由连续的若干个 紧跟着若干个 组成,其中的 表示网络位, 表示主机位。例如: FFFF:FF00::
( ),表示前 位为网络号,后 位为主机号。
CIDR
表示法是一种简化和扩展 IP
地址表示的方法,它允许更灵活地定义和分配 IP
地址以及它们的子网。CIDR
表示法通过在 IP
地址后面附加一个斜线 /
和一个在 到 的数字来表示网络号的长度,这个数字表示子网掩码中连续的前缀 的位数。
数据规模
测试点 | 数据规模 |
---|---|
对于所有的数据 |