trie:141MS
#include<cstdio>
const int maxn=100000+10;
const int tk=26,tb=97;
int triecnt=1,bufcnt=0,tree[maxn<<2][tk+1];
char buf[maxn<<1][12];
int search(char *s)
{
for(int rt=0;rt=tree[rt][*s-tb];)
if(*(++s)==0) return tree[rt][tk];
return 0;
}
void insert(char *s,int rank=1)
{
int rt,nxt;
for(rt=0;*s;rt=nxt,++s)
{
nxt=tree[rt][*s-tb];
if(!nxt)
tree[rt][*s-tb]=nxt=triecnt++;
}
tree[rt][tk]=rank;
}
int main()
{
int i,j;
char str[50];
while(gets(str)&&str[0])
{
char *s1=buf[bufcnt],*s2=buf[bufcnt+1];
for(i=0;str[i]!=' ';i++)
s1[i]=str[i];
s1[i]=0;
while(str[++i]==' ');
for(j=0;str[i];i++)
s2[j++]=str[i];
s2[j]=0;
insert(s2,bufcnt+1);
bufcnt+=2;
}
while(gets(str)!=NULL)
{
int t=search(str);
puts(t?buf[t-1]:"eh");
}
return 0;
}
本文介绍了一种使用Trie树进行高效文本检索的方法。通过插入字符串到Trie树中并进行搜索,可以快速找到匹配的字符串及其对应的排名。文章详细展示了如何用C语言实现这一过程,包括初始化Trie树、插入数据、搜索等功能。
847

被折叠的 条评论
为什么被折叠?



