IP-адреса и подсети CIDR

Просмотр в формате PDF

Submit solution


Очки: 170
Ограничение по времени: 2.0s
Ограничение по памяти: 256M

Автор:
Problem types
Allowed languages
C++, Python

Сетевой монитор анализирует список IPv4-адресов и должен определить, в сколько заданных CIDR-подсетей попадает каждый адрес.

IPv4-адрес записывается в виде a.b.c.d, где a, b, c, d — целые числа от 0 до 255.

CIDR-подсеть записывается в виде a.b.c.d/p, где p — целое число от 0 до 32. Считается, что IP-адрес принадлежит такой подсети, если его первые p битов совпадают с первыми p битами адреса a.b.c.d при просмотре битов слева направо, от старшего к младшему. Если p = 0, то в такую подсеть попадает любой IPv4-адрес.

Даны n подсетей и q IPv4-адресов. Для каждого адреса определите, в скольких из заданных подсетей он содержится.

Входные данные

Первая строка содержит два целых числа n и q — количество подсетей и количество IP-адресов соответственно.

Следующие n строк содержат по одной подсети в формате a.b.c.d/p.

Следующие q строк содержат по одному IPv4-адресу в формате a.b.c.d.

Гарантируется, что все числа в записи адресов и подсетей заданы без ведущих нулей, кроме числа 0.

Выходные данные

Для каждого из q адресов выведите в отдельной строке одно целое число — количество заданных подсетей, в которые попадает этот адрес.

Ограничения

  • 1 <= n, q <= 10^5
  • 0 <= a, b, c, d <= 255
  • 0 <= p <= 32

Примеры

Пример 1

Входные данные

1 1
0.0.0.0/0
1.2.3.4

Выходные данные

1
Пример 2

Входные данные

5 5
0.0.0.0/0
1.2.3.4/32
1.2.3.0/24
10.0.0.0/8
127.0.0.1/32
1.2.3.4
1.2.3.5
127.0.0.1
8.8.8.8
10.255.255.255

Выходные данные

3
2
2
1
2

Комментарии

Еще нет ни одного комментария.