{"trustable":true,"sections":[{"title":"","value":{"format":"HTML","content":" \n \u003cp\u003e小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。\u003c/p\u003e \n \u003cp\u003e这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能\u003cstrong\u003e对于每一个我给出的字符串,都在这个词典里面找到以这个字符串开头的所有单词呢?\u003c/strong\u003e”\u003c/p\u003e \n \u003cp\u003e身经百战的小Ho答道:“怎么会不能呢!你\u003cstrong\u003e每给我一个字符串,我就依次遍历词典里的所有单词,检查你给我的字符串是不是这个单词的前缀不就是了?\u003c/strong\u003e”\u003c/p\u003e \n \u003cp\u003e小Hi笑道:“你啊,还是太年轻了!~假设这本词典里有10万个单词,我询问你一万次,你得要算到哪年哪月去?”\u003c/p\u003e \n \u003cp\u003e小Ho低头算了一算,看着那一堆堆的0,顿时感觉自己这辈子都要花在上面了...\u003c/p\u003e \n \u003cp\u003e小Hi看着小Ho的囧样,也是继续笑道:“让我来提高一下你的知识水平吧~你知道树这样一种数据结构么?”\u003c/p\u003e \n \u003cp\u003e小Ho想了想,说道:“知道~它是一种基础的数据结构,就像\u003ca href\u003d\"http://zh.wikipedia.org/wiki/%E6%A0%91_(%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84)\" target\u003d\"_blank\"\u003e这里\u003c/a\u003e说的一样!”\u003c/p\u003e \n \u003cp\u003e小Hi满意的点了点头,说道:“那你知道我怎么样用一棵树来表示整个词典么?”\u003c/p\u003e \n \u003cp\u003e小Ho摇摇头表示自己不清楚。\u003c/p\u003e \n \u003cp\u003e\u003ca href\u003d\"#\" data-toggle\u003d\"modal\" data-target\u003d\"#m1\" style\u003d\"margin-right:10px;\"\u003e提示一:Trie树的建立\u003c/a\u003e\u003c/p\u003e \n \u003cp\u003e“你看,我们现在得到了这样一棵树,那么你看,如果我给你一个字符串ap,你要怎么找到所有以ap开头的单词呢?”小Hi又开始考校小Ho。\u003c/p\u003e \n \u003cp\u003e“唔...一个个遍历所有的单词?”小Ho还是不忘自己最开始提出来的算法。\u003c/p\u003e \n \u003cp\u003e“笨!这棵树难道就白构建了!”小Hi教训完小Ho,继续道:“看好了!”\u003c/p\u003e \n \u003cp\u003e\u003ca href\u003d\"#\" data-toggle\u003d\"modal\" data-target\u003d\"#m2\" style\u003d\"margin-right:10px;\"\u003e提示二:如何使用Trie树\u003c/a\u003e\u003c/p\u003e \n \u003cp\u003e\u003ca href\u003d\"#\" data-toggle\u003d\"modal\" data-target\u003d\"#m3\" style\u003d\"margin-right:10px;\"\u003e提示三:在建立Trie树时同时进行统计!\u003c/a\u003e\u003c/p\u003e \n \u003cp\u003e“那么现在!赶紧去用代码实现吧!”小Hi如是说道\u003c/p\u003e \n \u003cdiv class\u003d\"modal\" id\u003d\"m1\" tabindex\u003d\"-1\" role\u003d\"dialog\" aria-labelledby\u003d\"myModalLabel\" aria-hidden\u003d\"true\"\u003e \n \u003cdiv class\u003d\"modal-dialog\"\u003e \n \u003cdiv class\u003d\"modal-content\"\u003e \n \u003cdiv class\u003d\"modal-header\"\u003e \u003cbutton type\u003d\"button\" class\u003d\"close\" data-dismiss\u003d\"modal\"\u003e\u003cspan aria-hidden\u003d\"true\"\u003e×\u003c/span\u003e\u003cspan class\u003d\"sr-only\"\u003eClose\u003c/span\u003e\u003c/button\u003e \n \u003ch4 class\u003d\"modal-title\"\u003e提示一:Trie树的建立\u003c/h4\u003e \n \u003c/div\u003e \n \u003cdiv class\u003d\"modal-body\"\u003e \n \u003cp\u003e小Hi于是在纸上画了一会,递给小Ho,道:“你看这棵树和这个词典有什么关系?”\u003c/p\u003e \n \u003cp\u003e \u003cimg src\u003d\"CDN_BASE_URL/cb1ac03d2299384076a260f76960a394?v\u003d1659525022\" title\u003d\"hiho2_1.jpg\"\u003e\u003cbr\u003e \u003c/p\u003e \n \u003cp\u003e小Ho盯着手里的纸想了一会道:“我知道了!\u003cstrong\u003e对于从树的根节点走到每一个黑色节点所经过的路径,如果将路径上的字母都连起来的话,就都对应着词典中的一个单词呢!\u003c/strong\u003e”\u003c/p\u003e \n \u003cp\u003e小Hi说道:“那你知道如何根据一个词典构建这样一棵树么?”\u003c/p\u003e \n \u003cp\u003e“不造!”\u003c/p\u003e \n \u003cp\u003e“想你也不知道,我来告诉你吧~”小Hi摆出一副老师的样子,说道:“你先这么想,如果我已经有了这样的一个词典和对应的一棵树,我要添加一个新的单词apart,我应该怎么做?”\u003c/p\u003e \n \u003cp\u003e“让我想想……”小Ho又开始苦思冥想:“首先我要先看看已经能走到哪一步了对吧?比如我从1号节点走\"a\"这一条边就可以走到2号节点,然后从2号节点走\"p\"这一条边可以走到3号节点,然后……就没路可走了!这时候我就需要添加一条从3号节点出发且标记为\"p\"的边才可以接着往下走……最后就是这样了!然后我把最后到达的这个结点标记为黑色就可以了。”\u003c/p\u003e \n \u003cp\u003e \u003cimg src\u003d\"CDN_BASE_URL/c4f13d485205dbcf554cc6ac2b3a208d?v\u003d1659525022\" title\u003d\"hiho2_2.jpg\"\u003e \u003c/p\u003e \n \u003cp\u003e小Hi说道:“真聪明~那你不妨再算算如果是一个有10W个单词的词典,每个单词的长度不超过10的话,这棵树会有多大?”\u003c/p\u003e \n \u003cp\u003e小Ho于是掏出笔来,一边画一遍念叨:“假设我已经将前三个单词构成了这样一棵树,那么我要添加一个新的单词的时候,最坏情况是这个单词和之前的三个单词都没有公共前缀,那么这个新的单词的长度如果是5的话,我就至少要添加5个结点到树中才能够继续表示这个词典!”\u003c/p\u003e \n \u003cp\u003e“而如果每次都是最坏情况的话,这棵树最多也就100W个结点这么大!更何况最坏情况是不可能次次都发生的!毕竟字母表也才26个字母呢!”小Ho继续说道。\u003c/p\u003e \n \u003cp\u003e“嗯~这样我们是不是就可以用(单词个数*单词长度)个结点来表示一个词典了呢?小Hi问道。\u003c/p\u003e \n \u003cp\u003e“是的呢!”小Ho道:“但是这样一棵树又有什么用呢?”\u003c/p\u003e \n \u003cp\u003e“可别小看了它,它就是传说中的Trie树哦~至于他有什么用,一会你就知道了!”小Hi笑嘻嘻的回答道。\u003c/p\u003e \n \u003c/div\u003e \n \u003cdiv class\u003d\"modal-footer\"\u003e \u003cbutton type\u003d\"button\" class\u003d\"btn btn-default\" data-dismiss\u003d\"modal\"\u003eClose\u003c/button\u003e \n \u003c/div\u003e \n \u003c/div\u003e\u003c!-- /.modal-content --\u003e \n \u003c/div\u003e\u003c!-- /.modal-dialog --\u003e \n \u003c/div\u003e\u003c!-- /.modal --\u003e \n \u003cdiv class\u003d\"modal\" id\u003d\"m2\" tabindex\u003d\"-1\" role\u003d\"dialog\" aria-labelledby\u003d\"myModalLabel\" aria-hidden\u003d\"true\"\u003e \n \u003cdiv class\u003d\"modal-dialog\"\u003e \n \u003cdiv class\u003d\"modal-content\"\u003e \n \u003cdiv class\u003d\"modal-header\"\u003e \u003cbutton type\u003d\"button\" class\u003d\"close\" data-dismiss\u003d\"modal\"\u003e\u003cspan aria-hidden\u003d\"true\"\u003e×\u003c/span\u003e\u003cspan class\u003d\"sr-only\"\u003eClose\u003c/span\u003e\u003c/button\u003e \n \u003ch4 class\u003d\"modal-title\"\u003e提示二:如何使用Trie树\u003c/h4\u003e \n \u003c/div\u003e \n \u003cdiv class\u003d\"modal-body\"\u003e \n \u003cp\u003e小Hi在树上用绿色标出了一个节点,递给小Ho。\u003c/p\u003e \n \u003cp\u003e \u003cimg src\u003d\"CDN_BASE_URL/8df66303fdfc46a55df789493599cd42?v\u003d1659525022\" title\u003d\"hiho2_3.jpg\"\u003e \u003c/p\u003e \n \u003cp\u003e“这个结点……是从根节点先走\"a\"然后走\"p\"到达的结点呢!哦~~我知道了,以这个结点为根的子树里所有标记结点都是以\"ap\"为前缀的单词呢!而且所有以\"ap\"为前缀的单词都在以这个节点为根的子树里~”小Ho惊喜道。\u003c/p\u003e \n \u003cp\u003e“是的呢~那你对怎么解决我的问题有想法了么?”小Hi追问道。\u003c/p\u003e \n \u003cp\u003e“唔...那就是每次拿到你的字符串之后,我在树上找到其对应的那个结点,然后统计这个节点中有多少个标记节点?”小Ho不是很确定的答道:“但是这样...似乎在最坏情况,也就是你每次给个字符串都很短的时候,我还是要扫描这棵树的很大一部分呢?也就是说虽然平均时间复杂度降低了,但是最坏情况时间复杂度还是很高的样子!”\u003c/p\u003e \n \u003cp\u003e小Hi笑嘻嘻道:”没想到你自己看出来了呢~我还以为又要教训你了!~那你有什么好的解决方法么?”\u003c/p\u003e \n \u003cp\u003e“没呢!小Hi你就别卖关子了,赶紧告诉我吧!”被折磨的够呛的小Ho开始求饶。\u003c/p\u003e \n \u003cp\u003e“好吧!就帮你这一回~”\u003c/p\u003e \n \u003c/div\u003e \n \u003cdiv class\u003d\"modal-footer\"\u003e \u003cbutton type\u003d\"button\" class\u003d\"btn btn-default\" data-dismiss\u003d\"modal\"\u003eClose\u003c/button\u003e \n \u003c/div\u003e \n \u003c/div\u003e\u003c!-- /.modal-content --\u003e \n \u003c/div\u003e\u003c!-- /.modal-dialog --\u003e \n \u003c/div\u003e\u003c!-- /.modal --\u003e \n \u003cdiv class\u003d\"modal\" id\u003d\"m3\" tabindex\u003d\"-1\" role\u003d\"dialog\" aria-labelledby\u003d\"myModalLabel\" aria-hidden\u003d\"true\"\u003e \n \u003cdiv class\u003d\"modal-dialog\"\u003e \n \u003cdiv class\u003d\"modal-content\"\u003e \n \u003cdiv class\u003d\"modal-header\"\u003e \u003cbutton type\u003d\"button\" class\u003d\"close\" data-dismiss\u003d\"modal\"\u003e\u003cspan aria-hidden\u003d\"true\"\u003e×\u003c/span\u003e\u003cspan class\u003d\"sr-only\"\u003eClose\u003c/span\u003e\u003c/button\u003e \n \u003ch4 class\u003d\"modal-title\"\u003e提示三:在建立Trie树时同时进行统计!\u003c/h4\u003e \n \u003c/div\u003e \n \u003cdiv class\u003d\"modal-body\"\u003e \n \u003cp\u003e“小Ho你有没有想过这样一个问题?\u003cstrong\u003e不妨称以T为根的子树中标记节点的个数为L[T],既然我要统计某个L[T1],,而这个结点是不确定的,我有没有办法一次性把所有结点的L[T]求出来呢?\u003c/strong\u003e”小Hi整理了下思绪,问道。\u003c/p\u003e \n \u003cp\u003e“似乎是有的,老师以前说过,递归什么的。。”小Ho答道。\u003c/p\u003e \n \u003cp\u003e“递归太复杂了!我们可以之后再说,你这么想,在你构建Trie树的时候,当你经过一个结点的时候,说明了什么?”小Hi撇了撇头,继续问道。\u003c/p\u003e \n \u003cp\u003e“我想想,经过一个结点……标记结点……说明了以这个结点为根的子树中将要多出来一个标记结点?”\u003c/p\u003e \n \u003cp\u003e“没错!那你有没有什么办法来记录这个改变呢?”\u003c/p\u003e \n \u003cp\u003e“我想想,\u003cstrong\u003e我在最开始置所有L[T]\u003d0,然后每次添加一个新的单词的时候,都将它经过的所有结点的L[T]全部+1,这样我构建完这棵Trie树的时候,我也就能够同时统计到所有L[T]了\u003c/strong\u003e,对么?”小Ho开心道。\u003c/p\u003e \n \u003c/div\u003e \n \u003cdiv class\u003d\"modal-footer\"\u003e \u003cbutton type\u003d\"button\" class\u003d\"btn btn-default\" data-dismiss\u003d\"modal\"\u003eClose\u003c/button\u003e \n \u003c/div\u003e \n \u003c/div\u003e\u003c!-- /.modal-content --\u003e \n \u003c/div\u003e\u003c!-- /.modal-dialog --\u003e \n \u003c/div\u003e\u003c!-- /.modal --\u003e \n "}},{"title":"Input","value":{"format":"HTML","content":" \n \u003cp\u003e输入的第一行为一个正整数n,表示词典的大小,其后n行,每一行一个单词(不保证是英文单词,也有可能是火星文单词哦),单词由不超过10个的小写英文字母组成,可能存在相同的单词,此时应将其视作不同的单词。接下来的一行为一个正整数m,表示小Hi询问的次数,其后m行,每一行一个字符串,该字符串由不超过10个的小写英文字母组成,表示小Hi的一个询问。\u003c/p\u003e \n \u003cp\u003e在20%的数据中n, m\u0026lt;\u003d10,词典的字母表大小\u0026lt;\u003d2.\u003c/p\u003e \n \u003cp\u003e在60%的数据中n, m\u0026lt;\u003d1000,词典的字母表大小\u0026lt;\u003d5.\u003c/p\u003e \n \u003cp\u003e在100%的数据中n, m\u0026lt;\u003d100000,词典的字母表大小\u0026lt;\u003d26.\u003c/p\u003e \n \u003cp\u003e\u003cspan style\u003d\"color:red\"\u003e本题按通过的数据量排名哦~\u003c/span\u003e\u003c/p\u003e \n "}},{"title":"Output","value":{"format":"HTML","content":" \n \u003cp\u003e对于小Hi的每一个询问,输出一个整数Ans,表示词典中以小Hi给出的字符串为前缀的单词的个数。\u003c/p\u003e \n \u003c/div\u003e \n "}},{"title":"Sample Input","value":{"format":"HTML","content":" \n \u003cpre\u003e5\r\nbabaab\r\nbabbbaaaa\r\nabba\r\naaaaabaa\r\nbabaababb\r\n5\r\nbabb\r\nbaabaaa\r\nbab\r\nbb\r\nbbabbaab\u003c/pre\u003e \n "}},{"title":"Sample Output","value":{"format":"HTML","content":" \n \u003cpre\u003e1\r\n0\r\n3\r\n0\r\n0\u003c/pre\u003e \n "}}]}