题意就是先输入一个字典: 目标字符串-----输入字符串
然后输入一个字符串,在上面的对应关系中进行查找,如果有则输出目标字符串,没有则输出eh。
如果不想超时的话,明显就要套字典树了。
代码贴上来,留作模板。字典树还是挺简单易懂的嘛。。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <memory.h>
using namespace std;
const int num_char=26;
struct TrieNode
{
TrieNode* branch[num_char];
char data[12];
};
TrieNode head;
int insert(const char *des,const char *src)
{
TrieNode *hp=&head;
while(*src!=0)
{
if((hp->branch[*src-'a'])==NULL)hp->branch[*src-'a']=new TrieNode();
hp=hp->branch[*src-'a'];
src++;
}
// if((hp->data)==NULL)hp->data=new char[strlen(des)+1];
strcpy(hp->data,des);
return 0;
}
bool search(const char *str,char *entry)
{
TrieNode* t=&head;
while(*str!=0)
{
if((t->branch[*str-'a'])==NULL)return false;
t=(t->branch[*str-'a']);
str++;
}
strcpy(entry,t->data);
return true;
}
int main()
{
char t[40];
while(gets(t))
{
char src[12],des[12];
if(t[0]=='\0')break;
sscanf(t,"%s %s",des,src);
insert(des,src);
}
char consult[12];
while(scanf("%s",consult)!=EOF)
{
char entry[12];
if(search(consult,entry))
printf("%s\n",entry);
else printf("eh\n");
}
return 0;
}