#P12871. [蓝桥杯 2025 国 Python A] 倒排索引

    ID: 14712 远端评测题 3000ms 512MiB 尝试: 0 已通过: 0 显示难度普及− 上传者: 标签>字符串2025哈希 hashing蓝桥杯国赛

[蓝桥杯 2025 国 Python A] 倒排索引

题目描述

在信息检索系统中,倒排索引是一种常用的数据结构,用于快速查找包含特定词语的文档集合。为了增强搜索的灵活性,我们引入了 N-Gram 分词算法,参数 [min⁡,max⁡][\min, \max],表示分别按照长度 min⁡\min、min⁡+1\min+1、⋯\cdots、max⁡\max 对单词进行滑动窗口截取。例如对于 [3,5][3, 5] 的 N-Gram,会将单词 lanqb\tt{lanqb} 分割为 [lan,anq,nqb,lanq,anqb,lanqb][\tt{lan, anq, nqb, lanq, anqb, lanqb}] 的索引序列,如果文档长度小于 min⁡\min,那么索引序列只包含文档本身。

给定 nn 个文档,对于第 ii 个文档 did_i,利用上述的 N-Gram 算法为其生成一组索引序列 LiL_i。对于查询词 qq,也对其应用 N-Gram 为其生成一个索引序列 PP,如果序列 PP 中的某个单词出现在序列 LiL_i 中,那么就认为查询词和文档 did_i 匹配成功。

请统计查询词 qq 能与多少个文档匹配成功。

输入格式

输入的第一行包含三个正整数 nn,min⁡\min,max⁡\max,相邻整数之间使用一个空格分隔。

接下来 nn 行,每行包含一个字符串,其中第 ii 行的字符串表示文档 did_i。

接下来一行包含一个字符串,表示查询词 qq。

输出格式

输出一行包含一个整数表示答案。

3 3 4
angel
ac
angle
lang
2

提示

【样例说明】

文档分词结果如下:

  • angel\tt{angel}:[ang,nge,gel,ange,ngel][\tt{ang, nge, gel, ange, ngel}]
  • ac\tt{ac}:[ac][\tt{ac}]
  • angle\tt{angle}:[ang,ngl,gle,angl,ngle][\tt{ang, ngl, gle, angl, ngle}]

查询词分词结果如下:

  • lang\tt{lang}:[lan,ang,lang][\tt{lan, ang, lang}]

angel\tt{angel} 和 angle\tt{angle} 的分词中都包含 ang\tt{ang},所以答案为 22。

【评测用例规模与约定】

设 ∣s∣|s| 表示字符串 ss 的长度。

对于 50% 的评测用例,1≤n≤1001 \leq n \leq 100;

对于所有评测用例,1≤n≤1031 \leq n \leq 10^3,1≤min⁡≤max⁡≤201 \leq \min \leq \max \leq 20,1≤∣di∣,∣q∣≤201 \leq |d_i|, |q| \leq 20,did_i 和 qq 都只包含小写英文字母。