思路:

  完全看题目中的介绍就行了。还有里面的input写道:不保证是英文单词,也有可能是火星文单词哦。比赛结束后的提交是不用考虑26个字母之外的,都会AC,如果考虑128种可能的话,爆了内存。步骤就是,在插单词的同时记录该结点之后的单词数,查词就查最后一个字母所在结点上的单词数。

 #include <iostream>
#include <cstring>
#include <vector>
#include <stdio.h>
using namespace std;
const int N=;
char dict[];
int n, m;
struct node
{
int num; //以本节点开头的单词个数
node *child[N]; //孩子
}tree_gen; int check_dict(char *p)
{
node *node_p=&tree_gen; //指向树根
int ans=;
while(*p!='\0')
{
if(node_p->child[*p-'a']!=)
{
node_p=node_p->child[*p-'a'];
ans=node_p->num;
}
else
return ;
p++;
}
return ans;
} int insert_tree(char *p)
{
node *node_p=&tree_gen; //指向树根
node_p->num++; //访问这个节点
while(*p!='\0')
{
if( node_p->child[*p-'a']== ) //还没有这叉,就要建
{
node *new_node=new(node); //创建新节点
for(int i=; i<N; i++)
new_node->child[i]=;
new_node->num=;
node_p->child[*p-'a']=new_node; //连接工作
node_p=new_node;
}
else //已有这叉,继续往下
node_p=node_p->child[*p-'a'];
node_p->num++; //访问这个节点
p++;
}
return ;
} int main()
{
//freopen("e:input.txt", "r", stdin);
tree_gen.num=; //树根的初始化
for(int i=; i<N; i++) tree_gen.child[i]=; cin>>n;getchar();
for(int i=; i<n; i++) //接受字典,顺便插入,顺便记录num
{
gets(dict);
insert_tree(dict);
}
cin>>m;getchar();
for(int i=; i<m; i++) //查询以xxx开头的单词个数
{
gets(dict);
cout<<check_dict(dict)<<endl;
}
return ;
}

AC代码

还有一种不是以链表实现的树,而是用数组来做的。小Ho做的这代码可以过一些小一点的数据。

 #include <cstdio>
#include <cstring> const int MAXL = + ;
const int MAXN = + ;
const int MAXM = + ; int next[MAXN * MAXL][], count[MAXN * MAXL]; int main() {
int n;
while (scanf("%d", &n) != EOF) {
int top = ; memset(next, , sizeof(next));
char str[MAXL];
for (int i = ; i < n; i++) {
scanf("%s", str);
int p = ;
for (int j = ; str[j] != '\0'; j ++) {
if (next[p][str[j] - 'a'] == ) next[p][str[j] - 'a'] = ++top;
p = next[p][str[j] - 'a'];
count[p] ++;
}
}
int m;
scanf("%d", &m);
while (m --) {
scanf("%s", str);
int p = ;
for (int j = ; str[j] != '\0'; j++) {
p = next[p][str[j] - 'a'];
}
printf("%d\n", count[p]);
}
}
}

Not AC代码

hihoCoder hiho一下 第二周 #1014 : Trie树(Trie树基本应用)的更多相关文章

  1. HihoCoder第二周与POJ3630:Trie树的建立

    这又是两道一样的题,都是建立trie树的过程. HihoCoder第二周: 这里其实逻辑都很简单,主要在于数据结构struct的使用. #include <iostream> #inclu ...

  2. hiho一下 第二周&第四周:从Trie树到Trie图

    hihocoder #1014 题目地址:http://hihocoder.com/problemset/problem/1014 hihocoder #1036 题目地址: http://hihoc ...

  3. hiho一下第二周 Trie树

    题目链接:http://hihocoder.com/problemset/problem/1014 #include <iostream> #include <cstdio> ...

  4. 【hiho一下第二周 】Trie树

    [题目链接]:http://hihocoder.com/problemset/problem/1014 [题意] [题解] 在字典树的域里面加一个信息cnt; 表示这个节点下面,记录有多少个单词; 在 ...

  5. hiho一下 第二周 trie树

    Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路 ...

  6. hihocoder hiho一下 第二十六周 最小生成树一·(Prim算法)

    题目1 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥 ...

  7. hihoCoder hiho一下 第一周 #1032 : 最长回文子串 (Manacher)

    题意:给一个字符串,求最长回文子串的长度. 思路: (1)暴力穷举.O(n^3) -----绝对不行. 穷举所有可能的出现子串O(n^2),再判断是否回文O(n).就是O(n*n*n)了. (2)记录 ...

  8. hihocoder hiho第38周: 二分·二分答案 (二分搜索算法应用:二分搜索值+bfs判断可行性 )

    题目1 : 二分·二分答案 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回和上上回里我们知道Nettle在玩<艦これ>,Nettle在整理好舰队之后 ...

  9. hiho一下21周 线段树的区间修改 离散化

    离散化 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho ...

随机推荐

  1. 微信小程序自学第一课:工程目录结构与.json文件配置

    注册成为开发者 地址: https://mp.weixin.qq.com/cgi-bin/wx 开发者工具下载地址 https://mp.weixin.qq.com/debug/wxadoc/dev/ ...

  2. webconfig配置详解--转

    花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. <? ...

  3. 20170527关于Thingking in Java

    由于工作上的需求,要开始学习Android开发,所以先开始看一些Java方面的知识.学习从Thingking in Java开始,看了一下第一张,感觉真的是一本好书,希望自己努力把他看完,加油! 第一 ...

  4. JS中的for....in循环 和 for ...of循环以及iterable遍历Map和Set

    for循环的一个变体是for ... in循环,它可以把一个对象的所有属性依次循环出来: var o = { name: 'Jack', age: 20, city: 'Beijing' }; for ...

  5. foreach 加 &

  6. webpack -- 多页面简单小例

    有时单页面并不能满足我们的业务需求,就需要去构建多页面应用,以下为简单小例: entry:{ index:'./src/module/index/index.js', student:'./src/m ...

  7. Java实例练习——基于UDP协议的多客户端通信

    昨天学习了UDP协议通信,然后就想着做一个基于UDP的多客户端通信(一对多),但是半天没做出来,今天早上在参考了很多代码以后,修改了自己的代码,然后运行成功,在这里分享以下代码,也说一下自己的认识误区 ...

  8. 关于text-overflow实现·多余字符省略·的正确打开方式

    1. 字符包裹元素要能控制宽度 2. 包裹元素中包含代码 .wrapper { ... text-overflow: ellipsis; overflow: hidden; white-space: ...

  9. c# Equals对比忽略大小写

    String.Equals(str1,str2,StringComparison.CurrentCultureIgnoreCase); StringComparison.CurrentCultureI ...

  10. avro-maven-plugin

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...