-->
当前位置:首页 > 题库 > 正文内容

编程题:暴力枚举+哈希表优化

Luz3年前 (2022-09-06)题库430
两个单词的最长公共前缀是两个单词开头的最长单词。例如,“identity”和“idealistic”这两个词最长的共同前缀是“ide”。

一个数据库包含N个单词。

在数据库中搜索查询词W的算法是原始的。它会将W一个接一个地与数据库中的每个单词进行比较。将两个单词逐个字母进行比较,直到找到它们不同的字母,或直到到达其中一个单词的末尾(然后确定两个单词相等或一个比另一个长)。当算法在数据库中找到单词W时,它终止。

对算法的分析表明,找到一个单词W所需的步骤数等于所比较的单词W的数量,加上最长的常用前缀W的长度和所比较的每个单词的长度之和。

编写一个程序,计算算法用于查找每个Q查询词的步数。

### 输入格式:
第一行包含一个整数$$N(1≤N≤30000)$$,数据库中的字数。

以下N行中的每一行都包含数据库中的一个单词。这些词是按照算法将它们与查询词进行比较的顺序给出的。数据库中的所有单词都是不同的。

下一行包含一个整数$$Q(1≤Q≤30000)$$,搜索的字数。

以下每一行都包含一个查询词。
输入中的所有单词都将是少于30个英文字母的字符串。
### 输出格式:
对于每个查询词,每行输出一个整数,即算法搜索该词时使用的步骤数。

### 输入样例1:
in
5
hobotnica
robot
hobi
hobit
robi
4
robi
hobi
hobit
rakija

### 输出样例1:
out
12
10
16
7


### 输入样例2:
in
8
majmunica
majmun
majka
malina
malinska
malo
maleni
malesnica
3
krampus
malnar
majmun

### 输出样例2:
out
8
29
14


在第二个例子中,搜索单词“krampus”的步骤是8步,因为算法只需要将其第一个字母与数据库中的每个单词进行比较。

搜索单词“malnar”时,前三个单词需要三个步骤,其余五个单词需要四个步骤,总共需要29个步骤。

为了找到“majmun”这个词,我们总共使用了14个步骤。对于数据库中的第一个单词,我们进行了六次成功的比较,其中一个步骤是确定单词“majmunica”比查询单词长。对于第二个词,我们还有六个成功的比较,以及最后一步,在这一步中,我们确定了两个词是相等的。找到单词后,算法非常高兴地终止







答案:若无答案欢迎评论

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。