#P15526. [ROIR 2015 Day 1] search 网络搜索冠军
[ROIR 2015 Day 1] search 网络搜索冠军
说明
为了举办全球网络搜索冠军赛,组织者需要限制访问某些地址。每个网络地址由服务器名和路径名组成。
服务器名由一到五个部分组成,每部分是由小写字母组成的非空字符串,部分之间用点号分隔。例如,a、ab.cd、abacaba 和 a.b.c.d.e 都是有效的服务器名。
路径名是一个字符串,可以为空,或者由一到五个部分组成,每部分以字符 / 开头,后跟一个或多个小写字母。例如,``、/a、/aba 和 /a/b/c/d/e 都是有效的路径名。
完整的地址是由服务器名和路径名拼接组成的。例如,a、aba/d/f/g/h、a.b、aba.caba/def/g 和 c.d.e.f.g/a/b/c/d/e 都是有效的地址。
为了限制访问,组织者为每个地址准备了多个过滤器。过滤器和地址一样,也由服务器名和路径名两部分组成。
服务器过滤器是服务器名,前面可以加上 *.。如果服务器过滤器只是服务器名,那么它只能匹配该服务器名完全相同的地址。如果服务器过滤器是 *.<服务器名>,则它匹配所有以该服务器名结尾的地址。
路径过滤器是路径名,后面可以加上 /*。如果路径过滤器是单一的路径名 ,它只能匹配完全相同的路径。如果路径过滤器是 ,它匹配所有以 为前缀的路径。
一个地址匹配过滤器的条件是,它的服务器名必须匹配过滤器的服务器名,且它的路径名必须匹配过滤器的路径名。
筛选器及其相应地址的示例见下表。
| 筛选器 | 匹配地址示例 |
|---|---|
ab.c/d/e |
|
*.a |
a ax.a efg.a |
*.a/b/c |
a/b/c x.a/b/c e.fg.a/b/c` |
x.yz/a/* |
x.yz/a x.yz/a/b/c x.yz/a/xyz |
*.a/* |
a x.a e.fg.a a/b/c x.a/ddd/c e.fg.a/b/c/g/haha/i |
*.a/b/c/* |
a/b/c x.a/b/c e.fg.a/b/c a/b/c/xxx e.fg.a/b/c/d/e/f |
任务:编写程序,对于给定的过滤器和地址,判断每个地址匹配多少个过滤器。
输入格式
第一行输入两个整数: —— 过滤器数量, —— 子任务编号()。
接下来 行,每行一个过滤器,格式与地址的服务器名和路径名相同。
接下来一行输入一个整数 —— 地址数量。
接下来 行,每行一个地址。
输出格式
输出文件应包含 个整数,每个整数表示一个地址匹配的过滤器数量。
2 0
a.bb/c
bb/c/d
4
a.bb
bb/c/d
a.bb/c/d
bb/c
0
1
0
0
4 0
*.bb/c
*.bb/c/*
bb/c/*
bb/c/*
6
bb
bb/c
bb/c/d
a.bb
a.bb/c
a.bb/c/d
0
4
3
0
2
1
提示
示例说明
在这个示例中,过滤器有 和 ,地址有 、、 和 。其中只有 地址匹配过滤器 ,其他的地址不匹配任何过滤器。
子任务评价与说明
子任务 1(27分)
所有过滤器都以 *. 开头并以 /* 结尾。
子任务 2(25分)
过滤器中没有 *。
子任务 3(48分)
没有任何限制条件。
翻译来源:GPT 5.2。
京公网安备 11011102002149号