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

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. webview之如何设计一个优雅健壮的Android WebView?(上)(转)

    转接:https://iluhcm.com/2017/12/10/design-an-elegant-and-powerful-android-webview-part-one/ 前言 Android ...

  2. Python基础之条件语句和循环

    条件语句 Python中的条件语句分为 if ...else . if ...elif...else  以及if ...else 的嵌套使用: username = input('请输入您的用户名:' ...

  3. 163邮箱报错WARN: 535 Error: authentication failed.

    会让输入自定义授权码..用这个密码代替邮箱的密码,就可以发邮件了.

  4. orcad 自带常用原理图库解析

    在cadence 安装目录下文件夹\Cadence\SPB_16.6\tools\capture\library 中有如下常用库,只是部分常用的库,还有很多不常用的也都在目录下面, 1.AMPLIFI ...

  5. GPIO输入输出各种模式(推挽、开漏、准双向端口)详解

    转自:https://blog.csdn.net/techexchangeischeap/article/details/72569999 概述 能将处理器的GPIO(General Purpose ...

  6. 创建自定义的 Angular Schematics

    本文对 Angular Schematics 进行了介绍,并创建了一个用于创建自定义 Component 的 Schematics ,然后在 Angular 项目中以它为模板演练了通过 Schemat ...

  7. 微信小程序-滚动Tab选项卡

    前言:今天呢 给大家详细讲解一下滚动Tab选项卡:左右可滑动切换的效果,希望对大家做项目时候有用! 以前也遇到过这个,但是没有做记录.转载来源于:https://www.jianshu.com/p/9 ...

  8. Android 开发 View的API 转载

    转载地址:https://blog.csdn.net/lemonrabbit1987/article/details/47704679 View类代表用户界面组件的基本构建块.一个View占据屏幕上的 ...

  9. idea搭建ssm框架

    1.file-->new-->project-->maven.... 2.建立后的目录: 3.pom.xml依赖建立: <?xml version="1.0" ...

  10. css:伪类和伪元素

    一:伪类 1.   :active   想被激活的元素添加样式 2.   :focus   向拥有键盘输入焦点的元素添加样式 3.   :hover   当鼠标悬浮在元素上方时,向元素添加样式 4.  ...