hihoCoder hiho一下 第二周 #1014 : Trie树(Trie树基本应用)
思路:
完全看题目中的介绍就行了。还有里面的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树基本应用)的更多相关文章
- HihoCoder第二周与POJ3630:Trie树的建立
这又是两道一样的题,都是建立trie树的过程. HihoCoder第二周: 这里其实逻辑都很简单,主要在于数据结构struct的使用. #include <iostream> #inclu ...
- hiho一下 第二周&第四周:从Trie树到Trie图
hihocoder #1014 题目地址:http://hihocoder.com/problemset/problem/1014 hihocoder #1036 题目地址: http://hihoc ...
- hiho一下第二周 Trie树
题目链接:http://hihocoder.com/problemset/problem/1014 #include <iostream> #include <cstdio> ...
- 【hiho一下第二周 】Trie树
[题目链接]:http://hihocoder.com/problemset/problem/1014 [题意] [题解] 在字典树的域里面加一个信息cnt; 表示这个节点下面,记录有多少个单词; 在 ...
- hiho一下 第二周 trie树
Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路 ...
- hihocoder hiho一下 第二十六周 最小生成树一·(Prim算法)
题目1 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥 ...
- hihoCoder hiho一下 第一周 #1032 : 最长回文子串 (Manacher)
题意:给一个字符串,求最长回文子串的长度. 思路: (1)暴力穷举.O(n^3) -----绝对不行. 穷举所有可能的出现子串O(n^2),再判断是否回文O(n).就是O(n*n*n)了. (2)记录 ...
- hihocoder hiho第38周: 二分·二分答案 (二分搜索算法应用:二分搜索值+bfs判断可行性 )
题目1 : 二分·二分答案 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回和上上回里我们知道Nettle在玩<艦これ>,Nettle在整理好舰队之后 ...
- hiho一下21周 线段树的区间修改 离散化
离散化 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho ...
随机推荐
- C# -- 继承规则
例子1--C#继承的常见问题: using System; using System.Collections.Generic; using System.Linq; using System.Text ...
- CODING 告诉你硅谷的研发项目管理之道(3)
前言: 本文为 CODING 教你一步步从一个程序员变身成管理者系列文章的第三篇,文章内容来自 Unity 的一位研发总监,详细叙述了他的管理风格和处事态度,同时列举了很多扩展阅读材料来帮助读者更全面 ...
- Struts2 源码分析-----工作原理分析
请求过程 struts2 架构图如下图所示: 依照上图,我们可以看出一个请求在struts的处理大概有如下步骤: 1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求: 2.这个请求经 ...
- JAVA中的工厂方法模式和抽象工厂模式
工厂方法模式: 定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类.类型:创建类模式类图: 类图知识点:1.类图分为三部分,依次是类名.属性.方法2.以& ...
- [Xcode 实际操作]五、使用表格-(4)设置UITableView单元格数据库源
目录:[Swift]Xcode实际操作 本文将演示如何自定义表格的数据来源. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //首先添加 ...
- 原生JS实现雪花特效
今天在校园招聘上被问到的问题,用JS写出雪花的效果.我打算使用多种方法来试试如何实现雪花. 这是目前按照网上某种思路模仿的第一种雪花,不太好看,但是大致意思清楚. 思路1:该思路直接由JS实现. 雪花 ...
- Luogu P2833 等式 我是傻子x2
又因为调一道水题而浪费时间...不过细节太多了$qwq$,暴露出自己代码能力的不足$QAQ$ 设$d=gcd(a,b)$,这题不是显然先解出来特解,即解出 $\frac{a}{d}x_0+\frac{ ...
- Collections.copy
List<String> names = Arrays.asList(new String[nameList.size()]); Collections.copy(names, nameL ...
- ProtobufUtils
import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Method; import com. ...
- Java面向对象_多态性、instanceof关键字
一.多态 分类:方法的重载与重写:对象的多态性 对象的多态性:向上转型:将子类实例转为父类实例 格式:父类 父类对象=子类实例;是自动转换 向下转型:将父类实例转为子类实例 格式:子类 子类对 ...