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

题目描述

在信息检索系统中,倒排索引是一种常用的数据结构,用于快速查找包含特定词语的文档集合。为了增强搜索的灵活性,我们引入了 N-Gram 分词算法,参数 $[\min, \max]$,表示分别按照长度 $\min$、$\min+1$、$\cdots$、$\max$ 对单词进行滑动窗口截取。例如对于 $[3, 5]$ 的 N-Gram,会将单词 $\tt{lanqb}$ 分割为 $[\tt{lan, anq, nqb, lanq, anqb, lanqb}]$ 的索引序列,如果文档长度小于 $\min$,那么索引序列只包含文档本身。 给定 $n$ 个文档,对于第 $i$ 个文档 $d_i$,利用上述的 N-Gram 算法为其生成一组索引序列 $L_i$。对于查询词 $q$,也对其应用 N-Gram 为其生成一个索引序列 $P$,如果序列 $P$ 中的某个单词出现在序列 $L_i$ 中,那么就认为查询词和文档 $d_i$ 匹配成功。 请统计查询词 $q$ 能与多少个文档匹配成功。

输入格式

输入的第一行包含三个正整数 $n$,$\min$,$\max$,相邻整数之间使用一个空格分隔。 接下来 $n$ 行,每行包含一个字符串,其中第 $i$ 行的字符串表示文档 $d_i$。 接下来一行包含一个字符串,表示查询词 $q$。

输出格式

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

说明/提示

**【样例说明】** 文档分词结果如下: - $\tt{angel}$:$[\tt{ang, nge, gel, ange, ngel}]$ - $\tt{ac}$:$[\tt{ac}]$ - $\tt{angle}$:$[\tt{ang, ngl, gle, angl, ngle}]$ 查询词分词结果如下: - $\tt{lang}$:$[\tt{lan, ang, lang}]$ $\tt{angel}$ 和 $\tt{angle}$ 的分词中都包含 $\tt{ang}$,所以答案为 $2$。 **【评测用例规模与约定】** 设 $|s|$ 表示字符串 $s$ 的长度。 对于 50% 的评测用例,$1 \leq n \leq 100$; 对于所有评测用例,$1 \leq n \leq 10^3$,$1 \leq \min \leq \max \leq 20$,$1 \leq |d_i|, |q| \leq 20$,$d_i$ 和 $q$ 都只包含小写英文字母。