#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:0000fe80::0001:0000。 -
当冒号之间的数字不满四位十六进制数时,可以省略前导零,如
fe80::0001:0000fe80::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 地址后面附加一个斜线 / 和一个在 到 的数字来表示网络号的长度,这个数字表示子网掩码中连续的前缀 的位数。
数据规模
| 测试点 | 数据规模 |
|---|---|
| 对于所有的数据 |