编程题:暴力枚举+哈希表优化
两个单词的最长公共前缀是两个单词开头的最长单词。例如,“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”比查询单词长。对于第二个词,我们还有六个成功的比较,以及最后一步,在这一步中,我们确定了两个词是相等的。找到单词后,算法非常高兴地终止
答案:若无答案欢迎评论
一个数据库包含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”比查询单词长。对于第二个词,我们还有六个成功的比较,以及最后一步,在这一步中,我们确定了两个词是相等的。找到单词后,算法非常高兴地终止
答案:若无答案欢迎评论