Files
2026-04-02 14:02:04 +08:00

3.0 KiB
Raw Permalink Blame History

百度、谷歌等搜索引擎,以及输入法等各种软件通常包含这样一个功能,当用户在输入框输入信息时,软件会提供一种“智能提示”。对用户所输入的信息,自动补全、列出可能的完整单词,提示给用户,以方便用户输入,提升用户体验。

pic.jpg

这个功能是如何实现的呢?一种典型的实现方式是,在系统后台维护一个字典,当用户输入字符时,在字典中查找以用户当前输入的字符串为前缀的全部单词,选取其中历史使用率最高的若干单词作为候选词,建议给用户。

请编写程序实现上述功能。

备注:这里约定一个字符串不能称为自己的前缀。若用户输入的字符串恰好是字典中的一个单词,则该单词不必向用户建议。

输入格式: 输入第一行为3个正整数n、m、k。n为字典中单词个数。m为用户查询数即用户输入的单词个数。对于用户输入的每个字符串程序需要返回字典中以该字符串为前缀的、历史使用频率最高的k个单词。接下来n行表示字典信息每行为1个整数和1个字符串整数表示单词的历史使用频率字符串表示单词请注意单词包含的每个字符为a-z的小写字母或0-9的数字即数字也可能构成字典中的单词。字典内的单词并非按使用频率有序存放。接下来m行表示用户的查询每行为一个a-z的小写字母或0-9的数字组成的字符串表示用户的查询。另外请注意由于字典往往是在用户历史数据的基础上加工而得所以字典中可能出现重复单词若某个单词在字典中出现多次则其历史使用频率以最高者为准。 (n ≤ 10000, m ≤ 20000, k ≤ 10, 每个单词长度不超过20单词历史使用频率小于2 31 )

输出格式: 对于用户输入的每个字符串按使用频率降序输出字典中以该字符串为前缀的、历史使用频率最高的k个单词每个占1行。若多个单词历史使用频率相同则字典序靠前的单词排名靠前。若单词中包含数字则字典序以ACSII码判定即0<1<2<…<9<a<b<c<…<z。若字典中满足输出条件的单词个数大于0小于k则有多少就输出多少个。若字典中没有满足输出条件的单词则输出“no suggestion”。针对用户每个查询所输出的信息用空行间隔。

输入样例: 20 3 4 1827187200 the 1595609600 to 1107331800 that 401542500 this 334039800 they 282026500 their 250991700 them 196118888 these 150877900 than 144968100 time 125563600 then 109336600 two 196120000 there 87862100 those 79292500 through 75885600 the 71578000 think 67462300 2 65648600 tx356 57087700 though th xxx the 输出样例: the that this they

no suggestion

they their them there

Code Size Limit 16 KB Time Limit 800 ms Memory Limit 64 MB Stack size limit 8192 KB C++ (g++)

No Submit Records