这里只简单给出几个常用的字典树的模板,要看具体介绍的请看:传送门

Problem Description
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
 
Input
输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.

注意:本题只有一组测试数据,处理到文件结束.

 
Output
对于每个提问,给出以该字符串为前缀的单词的数量.
 
Sample Input
banana
band
bee
absolute
acm
 
ba
b
band
abc
 
Sample Output
2
3
1
0

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
char ch[15];
int tri[maxn][30];
int sum[maxn];
void insert(char * ch,int & cnt){
int len=strlen(ch);
int id=0;
for(int i=0;i<len;i++){
int tem=ch[i]-'a';
if(tri[id][tem]==0){
tri[id][tem]=++cnt;
} id=tri[id][tem];sum[id]++;
}
return ;
}
int find(char * ch){
int len=strlen(ch);
int id=0;
for(int i=0;i<len;i++){
int tem=ch[i]-'a';
if(tri[id][tem]==0){
return 0;
}
id=tri[id][tem];
}
return sum[id];
}
int main(){
char ch1;
int len=0;
int cnt=0;
while(ch1=getchar()){
if(ch1!='\n')
ch[len++]=ch1;
if(ch1=='\n'){
if(len==0)break; ch[len]='\0';
// puts(ch);
insert(ch,cnt);
len=0;
}
}
while(scanf("%s",ch)!=EOF){
//cout<<ch<<endl;
printf("%d\n",find(ch));
}
return 0;
}

  建字典树:

void insert(char * ch,int & cnt){
int len=strlen(ch);
int id=0;
for(int i=0;i<len;i++){
int tem=ch[i]-'a';
if(tri[id][tem]==0){
tri[id][tem]=++cnt;
}
id=tri[id][tem];
sum[id]++;//可以用来查询以某字符串为前缀的字符串的数量 如hdu1251
}
vis[id]=1;//可以用来查询某字符串是否存在
return ;
}

  查询:

int find(char * ch){
int len=strlen(ch);
int id=0;
for(int i=0;i<len;i++){
int tem=ch[i]-'a';
if(tri[id][tem]==0){
return 0;
}
id=tri[id][tem];
}
// return vis[id];
return sum[id];//也可以返回vis【id】,即判断当前字符串是否存在,存在返回一,不存在返回零
}

  

  

hdu1251+字典树常用模板的更多相关文章

  1. hdu1251 字典树trie 模板题

    //字典树模板题.题意:给一个库,每次查询,求以之为前缀的单词数量. #include<iostream> #include<string> #include<vecto ...

  2. *HDU1251 字典树

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

  3. HDU 1251 统计难题(字典树入门模板题 很重要)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

  4. hdu1251 字典树or map

    一道字典树的题,不过看起来用map更为简单 传送门 题意: 给出一堆字符串构成一个字典,求字典里以某字符串为前缀的字符串有几个 思路: 输入字符串时把字符串的前缀全部存进map并标记次数 查询时直接输 ...

  5. hdu1251字典树递归算法

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Subm ...

  6. HDU1251 字典树板子题

    题意:中文题,统计以某字符串作为前缀的字符串个数 刚学字典树,理解起来十分简单,就是维护一个多叉树,这里用的是链表版本,后面就用的是数组版本了,个人更喜欢数组版本,这里的链表版本就因为 莫名其妙的错误 ...

  7. HDu-1247 Hat’s Words,字典树裸模板!

    Hat's Words 题意:给出一张单词表求有多少个单词是由单词表里的两个单词组成,可以重复!按字典序输出这些单词. 思路:先建一个字典树,然后枚举每个单词,把每个单词任意拆分两部分然后查找. 目测 ...

  8. 统计难题---hdu1251字典树模板

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1251 node *head=(node*)malloc(sizeof(node)); for(int ...

  9. 字典树(Tire)模板

    #include<stdio.h> #include<string.h> #include<stdlib.h> struct node { node *ne[]; ...

随机推荐

  1. Python【每日一问】08

    问:请解释一下装饰器的本质.功能 答: 1.装饰器的本质:闭包函数 2.装饰器的功能:在不改变函数本体结构.调用方法的情况下,给函数添加额外的功能 3.装饰器的实现方式 装饰器的实现方式一般是: de ...

  2. java构建工具——ant使用

    Ant是跨平台的构建工具,它可以实现项目的自动构建和部署等功能.在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作. 一.安装与部署 1.1 下载 下载地址:https: ...

  3. Java 中 Equals和==的区别(转)

    另外一篇参考: https://blog.csdn.net/striverli/article/details/52997927 在谈论equals和==的区别前,我们先简单介绍一下JVM中内存分配的 ...

  4. Ajax2简单的使用方式

    http://www.cnblogs.com/Ming8006/p/6142191.html

  5. [论文阅读]Object detection at 200 Frames Per Second

    本文提出了一个有效且快速的目标检测器,该目标检测器得速度可以达到200+fps,在Pascal VOC-2007上的mAP比Tiny-Yolo-v2高出14. 本文从以下三个方面对网络进行改进. 网络 ...

  6. omniPlan密匙

    密钥所有者都是youliyuan.OmniPlan 3:HOMJ-QOJH-OIBN-TNIH-HWUN-TEEH-WUNNKWO-HVKB-JAZE-UIHH-XAVY-BEEX-AVYBCRW-M ...

  7. Spring 框架用到的 9 个设计模式汇总!

      1. 简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一. 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类 ...

  8. orcal - 子查询

    where 单行单列 SELECT AVG(sal) from emp; SELECT * FROM EMP WHERE sal <(SELECT AVG(sal) from emp); 单行多 ...

  9. 使用 nodeJs 开发微信公众号(获取access_token)

    要使用微信提供的功能接口,就需要获取到access_token,这是开发公众号必不可少的一部 access_token有效期20分钟,建议保存起来,过期后在重新获取 获取流程如下: 我将微信相关的操作 ...

  10. 使用events.EventEmitter 控制Node.js 程序执行流程

    使用events.EventEmitter 控制Node.js 程序执行流程 标题写的可能也不太对,大家领会精神: Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. ...