647. [Youdao2010] 有道搜索框

★☆   输入文件:youdao.in   输出文件:youdao.out   简单对比
时间限制:1 s   内存限制:128 MB

【问题描述】

在有道搜索框中,当输入一个或者多个字符时,搜索框会出现一定数量的提示,如下图所示:

现在给你 N 个单词和一些查询,请输出提示结果,为了简这个问题,只需要输出以查询词为前缀的并且按字典序排列的最前面的 8 个单词,如果符合要求的单词一个也没有请只输出当前查询词。

【输入文件】

第一行是一个正整数 N ,表示词表中有 N 个单词。 
接下来有 N 行,每行都有一个单词,注意词表中的单词可能有重复,请忽略掉重复单词。所有的单词都由小写字母组成。 
接下来的一行有一个正整数 Q ,表示接下来有 Q 个查询。 
接下来 Q 行,每行有一个单词,表示一个查询词,所有的查询词也都是由小写字母组成,并且所有的单词以及查询的长度都不超过 20 ,且都不为空 
其中: N<=10000,Q<=10000

【输出文件】

对于每个查询,输出一行,按顺序输出该查询词的提示结果,用空格隔开。

【样例输入】 
youdao.in

10 

ab 
hello 
that 
those 
dict 
youdao 
world 
your 
dictionary 

bob 

dict 
dicti 
yo 
z

【样例输出】

youdao.out

bob 
dict dictionary 
dict dictionary 
dictionary 
youdao your 
z

呜呜 太惨了 就因为一个小小的错误就WA了半天 一定要注意这一道题 只输出字典序最小的前8个  不要超过8个!

这一道题其实就是一个裸的Trie树 如果您还没学过(<<很抱歉 本博主还没有写一篇关于Trie树讲解的博客 还请谅解)

然后再输入的时候把它们全部存起来

每输入一个前缀

就先搜索一下Trie树上能不能搜索到这个前缀

如果不能搜索到  就直接按照题目要求 把这个前缀输出一遍直接完事儿

要是搜到了 就把Trie树dfs一遍 就是在dfs的过程中 在变量中加一个数组 来存储答案字符串

如果当前节点的f是true  就是是一个字符串的结尾 就输出到当前节点为止的字符拍起来形成的字符串

但也要判断 如果已经搜索过8个字符串了 就直接返回return

那么我们不禁心生疑问 那里有处理字典序最小?

哈哈 这个还是非常简单的 因为在trie树的每一个节点不是都有一个for循环来枚举往下接着走那一条边嘛,因为for循环是从小到大的   所以自然针对每一个节点 就先走的更靠前的字典序更小的儿子son  组合起来就是字典序最小的字符串啦

下面上代码 (可能有点长 但是很好理解 哈哈)

#include<bits/stdc++.h>
using namespace std;
struct Trie{
Trie* son[];
bool f;
Trie()
{
for(int i=;i<=;i++)
son[i]=NULL;
f=false;
}
}Root;
int num=;
void dfs(char s[],Trie* p,string ans)
{
if(num==) return;
if(p->f==true)
printf("%s",s),cout<<ans<<" ",num++;
ans+='';
for(int i=;i<;i++)
{
if(p->son[i]==NULL)
continue;
ans[ans.length()-]=i+'a';
dfs(s,p->son[i],ans);
}
}
int main()
{
freopen("youdao.in","r",stdin);
freopen("youdao.out","w",stdout);
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
char s[];
scanf("%s",s);
int len=strlen(s);
Trie* p=&Root;
for(int j=;j<len;j++)
{
int x=s[j]-'a';
if(p->son[x]==NULL)
p->son[x]=new Trie;
p=p->son[x];
}
p->f=true;
}
int q;
scanf("%d",&q);
for(int i=;i<=q;i++)
{
char s[];
scanf("%s",s);
int len=strlen(s);
bool Find=true;
Trie* p=&Root;
string ans="";
for(int j=;j<len;j++)
{
int x=s[j]-'a';
if(p->son[x]==NULL)
{
Find=false;
break;
}
p=p->son[x];
}
if(!Find)
puts(s);
else
dfs(s,p,ans),printf("\n");
num=;
}
return ;
}

cogs 647. [Youdao2010] 有道搜索框 Trie树 字典树的更多相关文章

  1. Cogs 647. [Youdao2010] 有道搜索框(Trie树)

    [Youdao2010] 有道搜索框 ★☆ 输入文件:youdao.in 输出文件:youdao.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 在有道搜索框中,当输入一个或 ...

  2. 剑指Offer——Trie树(字典树)

    剑指Offer--Trie树(字典树) Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种的单词.对于每一个单词,我们要判断他出没出现过,如果出现了,求第一次出现在第几个位 ...

  3. AC自动机——1 Trie树(字典树)介绍

    AC自动机——1 Trie树(字典树)介绍 2013年10月15日 23:56:45 阅读数:2375 之前,我们介绍了Kmp算法,其实,他就是一种单模式匹配.当要检查一篇文章中是否有某些敏感词,这其 ...

  4. Trie(字典树)

    没时间整理了,老吕又讲课了@ @ 概念 Trie即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种,典型应用是统计和排序大量的字符串(不限于字符串) Trie字典树主要用于存储字符串, ...

  5. cogs 293. [NOI 2000] 单词查找树 Trie树字典树

    293. [NOI 2000] 单词查找树 ★★☆   输入文件:trie.in   输出文件:trie.out   简单对比时间限制:1 s   内存限制:128 MB 在进行文法分析的时候,通常需 ...

  6. Trie - leetcode [字典树/前缀树]

    208. Implement Trie (Prefix Tree) 字母的字典树每个节点要定义一个大小为26的子节点指针数组,然后用一个标志符用来记录到当前位置为止是否为一个词,初始化的时候讲26个子 ...

  7. Trie树 - 字典树

    1.1.什么是Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是最大限 ...

  8. Trie树/字典树题目(2017今日头条笔试题:异或)

    /* 本程序说明: [编程题] 异或 时间限制:1秒 空间限制:32768K 给定整数m以及n个数字A1,A2,..An,将数列A中所有元素两两异或,共能得到n(n-1)/2个结果,请求出这些结果中大 ...

  9. Trie(前缀树/字典树)及其应用

    Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,PATRICIA tree,以及bitwise版本的crit-bit tree.当然很多名字的意义其实有交 ...

随机推荐

  1. Codeforces Round #179 (Div. 1 + Div. 2)

    A. Yaroslav and Permutations 值相同的个数不能超过\(\lfloor \frac{n + 1}{2} \rfloor\). B. Yaroslav and Two Stri ...

  2. H3C 单区域OSPF配置示例二

  3. python进阶之面向对象初识

    面向对象 不同于面向过程的编程思想,面向对象是一种将程序抽象为一个个对象的编程思想,能更好的处理现实世界到的一些复杂问题. 通过下面的例子来初步了解面向对象的编程方式. class Person: # ...

  4. H3C 多路径网络中环路避免操作示例

  5. The bind() Method

    The bind() method was added in ESMAScript 5, but it is easy to simulate in ESMAScrpt 3. As its name ...

  6. intellij 创建一个文件自动就add到git了,这个怎么取消

    解决方案一: 展开全部 打开IDEA->File->Settings->VersionControl->Confirmation 上面有个When files are crea ...

  7. h5&css3

    HTML5 HTML5简介 万维网的核心语言.标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次重大修改.作为新HTML语言,具有新的元素,属性和行为 它具有更大的技术集,允许更多样化和强 ...

  8. 20191017-5 alpha week 2/2 Scrum立会报告+燃尽图 04

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9801 小组名称:“组长”组 组长:杨天宇 组员:魏新,罗杨美慧,王歆瑶,徐 ...

  9. 洛谷$P1600$ 天天爱跑步 树上差分

    正解:树上差分 解题报告: 传送门$QwQ$! 这题还挺妙的,,,我想了半天才会$kk$ 首先对一条链$S-T$,考虑先将它拆成$S-LCA$和$LCA-T$,分别做.因为总体上来说差不多接下来我就只 ...

  10. Redo与Undo的理解

    本文概要本文的原意是一篇个人学习笔记,为了避免成为草草记录一下的流水账,尝试从给人介绍的角度开写.但在整理的过程中,越来越感觉力不从心,一是细节太多了,原以为足够了解的一个小知识点下可能隐藏了很多细节 ...