poj 2503 Babelfish trie树!!!!指针版和数组版 基础
指针版
#include<iostream>
using namespace std;
#define max 26
struct node//初始tire树
{
bool boo;//判断是否是字符串最低端
char aa[15];//将b字符串最低端 存a字符串
node *next[max];
};
node *root;
void trie()//初始!!!!
{
root=new node;
root->boo=0;
for(int i=0;i<max;i++)
root->next[i]=NULL;
}
void insert(char a[],char b[])
{
node *p=root,*t;//将p指向当前节点,p来开辟内存
int len=strlen(b);//
for(int i=0;i<len;i++)//建立b字符串这么深得树
{
if(p->next[b[i]-'a']==NULL)
{
t=new node;
for(int j=0;j<max;j++)
t->next[j]=NULL;
t->boo=0;
p->next[b[i]-'a']=t;
}
p=p->next[b[i]-'a'];
}
p->boo=1;//树低用boo标记
memcpy(p->aa,a,sizeof(p->aa));//把a字符串存入树低
}
void search(char c[])
{
int len=strlen(c);
node *p=root;
for(int i=0;i<len;i++)//按树查找,如果到了树低boo值为1,就将字符aa输出
{
if(p->next[c[i]-'a']!=NULL)
p=p->next[c[i]-'a'];
else
{
printf("eh\n");
return ;
}
}
if(p->boo==1)
printf("%s\n",p->aa);
else
printf("eh\n");
}
int main()
{
char a[15],b[15],c[15];
trie();
while(scanf("%s",a)&&getchar()==' ')//这个格式真让人纠结
{
scanf("%s",b);
insert(a,b);
}
do
{
search(a);
}
while(scanf("%s",a)!=EOF);
return 0;
}
数组版
#include<stdio.h>
#include<string.h>
struct trie
{
int boo;
char node [15];
int son[27];
}tree[150010];
int num;
void insert(char a[],char b[])
{
int now=0;
for(int i=0;i<strlen(b);i++)
{
if(tree[now].son[b[i]-'a']==-1)
{
num++;
for(int t=0;t<26;t++)
tree[num].son[t]=-1;
tree[num].boo=0;
tree[now].son[b[i]-'a']=num;/*i wrote the son as 'A' at the first time*/
}
now=tree[now].son[b[i]-'a'];
}
memcpy(tree[now].node,a,sizeof(tree[now].node));
tree[now].boo=1;
}
int find(char temp[])
{
int now=0;
for(int i=0;i<strlen(temp);i++)
{
now=tree[now].son[temp[i]-'a'];
if(now==-1)
return 0;
}
if(tree[now].boo)
{
printf("%s\n",tree[now].node);
return 1;
}
return 0;
}
int main()
{
for(int i=0;i<26;i++)
tree[0].son[i]=-1;
char a[15],b[15];
while(scanf("%s",a)&&getchar()==' ')
{
scanf("%s",b);
insert(a,b);
}
do
{
if(find(a)==0)
printf("eh\n");
}
while(scanf("%s",a)!=EOF);
return 0;
}
poj 2503 Babelfish trie树!!!!指针版和数组版 基础相关推荐
- poj - 2503 Babelfish
简单字典树. 1 #include <stdio.h> 2 #include <string.h> 3 const int N = 200000; 4 int nxt[N][2 ...
- Poj 2503 Babelfish(Map操作)
一.Description You have just moved from Waterloo to a big city. The people here speak an incomprehens ...
- [POJ 2503] Babelfish【二分查找】
题目大意 给你一个词典,每行有两个字符串x,y,表示y翻译成x. 一行空行隔开. 给你一些单词y,问你翻译后的x,如果词典里没有,那么就输出"eh" 解题报告 C++调map,还可 ...
- Trie树kmpAC自动机后缀数组Manacher
Trie 计数+Trie,读清题意很重要 https://vjudge.net/problem/UVALive-5913 kmp AC自动机 模板:https://vjudge.net/problem ...
- 数据结构-----基于双数组的Trie树
Trie树简介 Trie树也称字典树,在字符串的查找中优势比较明显,适用于在海量数据中查找某个数据.因为Trie树的查找时间和数据总量没有关系,只和要查找的数据长度有关.比如搜索引擎中热度词语的统计. ...
- 双数组trie树详解
目录 双数组trie树的构建 构建base array 构建check array 双数组trie树的查询 双数组trie树的构建 NLP中trie树常用于做快速查询,但普通的trie树由于要保存大量 ...
- poj 2503 Trie树
典型的Trie树, 算是复习一下字符串吧, 就是输入有点恶心,代码如下: #include <cstdio> #include <cstring> #include <a ...
- POJ 2418 Hardwood Species(trie 树)
题目链接 开始想用map的,字典序不会搞,还是老老实实的用trie树把.好久没写了,忘得差不多了. 1 #include <iostream> 2 #include <cstdio& ...
- poj 2945 Find the Clones 用trie树实现
/*原来动态构树是这么费时间的...20000个单词最长为20个的题,跑到了1688MS,题目: 题目大概是说找出相同的字符串并且统计个数.分析: 因为昨天刚学完trie树,现在练了几道,有点感觉了, ...
- SZUACM集训字符串基础总结: 字符串最小表示 ,KMP, EXKMP, Manracher, Trie树,字符串的hash; 附带一写常见的运用技巧,邝斌大佬的板子和例题[持续更新]
第一部分 字符串的匹配<-------->KMP 模式匹配:子串的定位运算称为串的模式匹配或串匹配. 假设有两个串S,T,设S为主串,也称正文串,T为子串,也称为模式,在主串S中查找与模式 ...
最新文章
- 完全命令行.NET开发
- nginx+keepalived双机热备
- 各个大厂的机器学习平台概述
- oracle mssql交换数据库,Database link 连接oracle MSSql 实现逻辑数据互导
- Jzoj4840 小W砍大树
- 【译】来看看WebWindow,一个跨平台的.NET Core webview 库
- 一起学习C语言:初步进入编程世界(二)
- CakePHP中文手册【翻译】
- 为您的IIS6下的网站配置Rewrite伪静态组件
- 计算机专业和制药工程,制药工程本科专业介绍
- 服务器监视Zabbix 5.0 - Window Agent安装
- 基于stm32单片机的电梯控制系统
- 面试题:ES和Solr的区别是什么?
- abi-compliance-checker 理解
- Linux命令之显示日期时间date
- DNN与推荐两大门派,一念神魔,功不唐捐
- 网络协议学习笔记 · 22
- 51单片机wifi物联网的浇花控制系统设计
- Python基础知识点
- 前端----html---第一天