POJ 2503 Babelfish

解题思路:字典树

NULL
#include <iostream>
using namespace std;
#define MAXN 1000001
char dic[MAXN],word[MAXN][11],ch[11];
int size,first[MAXN],next[MAXN],place[MAXN];

void Build(int n)
{
int i,t,p=0,l=strlen(ch);
for(i = 0; i<l;i++)
{
t
=first[p];
while (t&&dic[t]!=ch[i])t=next[t];
if(!t)
{
dic[
++size]=ch[i],next[size]=first[p];
first[p]
=size,first[size]=0,p=size;
}
else
p
=t;
}
place[p]
=n;
}
int main()
{
int i,t,p,l,n,size=n=0;
char str[30];
while (gets(str)&&str[0]!='\0')
sscanf(str,
"%s %s",word[++n], ch),Build(n);
while (gets(ch)&&ch[0]!='\0')
{
p
=0,l=strlen(ch);
for(i=0;i<l;i++){t=first[p];while (t&&dic[t]!=ch[i])t=next[t];p=t;}
(p
==0)?printf("eh\n"):printf("%s\n",word[place[p]]);
}
return 0;
}

 

posted on 2010-12-13 12:46  ltang  阅读(138)  评论(0编辑  收藏  举报

导航