题目链接:http://poj.org/problem?id=2503
题意:就像翻译一样,输入一个单词,输出它所对应的一个单词。
解题思路:首先将后面待查询的单词构建成一棵trie树,在结构体中增加一个保存前面单词的一个字符串数组,在插入的时候,把要查询那个单词对应的单词存入数组中,以便在查询的时候,如果查询到就打印出对应的单词,否则打印出”eh”;
代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
const int maxn=201314;
struct Tree
{
int next[26];
char wei[26];//在对应的树尾上加一个尾巴!
void init()
{
memset(next,-1,sizeof(next));
}
} t[maxn];
int cur=1;
void creat(char ss[],int len,char ci[])
{
int p=0;
for(int i=0; i<len; i++)
{
int x=ss[i]-'a';
if(t[p].next[x]==-1)
{
t[cur].init();
t[p].next[x]=cur++;
}
p=t[p].next[x];
}
strcpy(t[p].wei,ci);
}
void cha(char ss[])
{
int p=0,i=0;
while(ss[i])
{
int x=ss[i]-'a';
if(t[p].next[x]==-1)
{
cout<<"eh"<<endl;
return ;
}
p=t[p].next[x];
i++;
}
cout<<t[p].wei<<endl;
}
int main()
{
t[0].init();
char str1[2013],str2[2014];
while(gets(str1))
{
if(!strlen(str1))
break;
char qian[2013],hou[2014];
int p=0;
while(str1[p]!=' ')
{
qian[p]=str1[p];
p++;//把前面的单词提取出来!
}
qian[p]='\0';
int cnt=0;
for(int i=p+1; i<strlen(str1); i++)
hou[cnt++]=str1[i];//提取后半部分字符串!
hou[cnt]='\0';
creat(hou,strlen(hou),qian);
}
//cout<<"逗比么你是?\n";
while(gets(str2)!=NULL)
cha(str2);
return 0;
}