思路:

  完全看题目中的介绍就行了。还有里面的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. 【前端自动化】Gulp的使用(一):安装gulp

    作为一个.NET码农,在前端高速发展的时代,深深感觉自己那么点“前端”技术不够看,比如开发出来的js css等文件庞大,不便于管理,还记得以前的开发就是累加 html  css   jquery, 现 ...

  2. Golang : cobra 包解析

    笔者在<Golang : cobra 包简介>一文中简要的介绍了 cobra 包及其基本的用法,本文我们从代码的角度来了解下 cobra 的核心逻辑. Command 结构体 Comman ...

  3. Beta博客总结

    描述项目预期计划和现实进展 冲刺 时间 预期任务以及预估时间 现实完成情况以及实际用时 冲刺1 12.4 修改等级答题界面:30,修改获取用户信息接口:30 修改等级答题界面:60,修改获取用户信息接 ...

  4. gulp使用文档

    gulp的优势 易于使用:通过代码优于配置的策略,Gulp让简单的任务简单,复杂的任务可管理. 构建快速:利用 Node.js 流的威力,你可以快速构建项目并减少频繁的 IO 操作. 插件高质:Gul ...

  5. Cogs 465. 挤牛奶

    465. 挤牛奶 ★   输入文件:milk2.in   输出文件:milk2.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 三个农民每天清晨5点起床,然后去牛棚给3 ...

  6. Struts2练习

    首先从下载的Struts2中apps文件夹下选中需要联系的示例,拷贝jar包到eclipse项目WEB-INF/lib目录下,然后构建路径

  7. ECharts 上手

    一.获取 ECharts 你可以通过以下几种方式获取 ECharts. 从官网下载界面选择你需要的版本下载,根据开发者功能和体积上的需求,我们提供了不同打包的下载,如果你在体积上没有要求,可以直接下载 ...

  8. 练习十八:求这样的一组数据和,s=a+aa+aaa+aaaa+aa...a,其中a为一个数字

    例如:2+22+222+2222+22222(此时共有5个数字相加),这里具体几个数字由键盘控制 方法一:普通做法 a = int(input("计算要加的数(1-9之间数):") ...

  9. 忘记mysql数据库密码时进行修改方法

    长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件夹( ...

  10. Jetty项目解压目录设置

    Ubuntu14.04 没有在Jetty的根目录下建立work文件夹时,Jetty会默认将项目解压到/var/cache/jetty/data/下,如果在Jetty的根目录下建立work文件夹,jet ...