题目链接
题目描述(Description)
给定一些字符串以及它在一种外星语言中的对应解释,现在有若干外星语言中的串,要求把它们翻译成英语。
分析(Analysis)
直接用字典树存外星语,维护一个长度为11的字符数组,用来存对应的英语。
代码(Code)
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
const int M=100003;
struct Node{
int hash;
struct Node *next;
}*link[M]={NULL};
char word[100000][11],dialect[100000][11];
/*Unix系统ELF字符串散列函数*/
int ELFhash(char *key)
{
unsigned long h=0,g;
while(*key){
h=(h<<4)+*key++;
g=h&0x0000000L;
if(g)
h^=g>>24;
h&=~g;
}
return h%M;
}
int main()
{
int i,j,e,n=0;
struct Node *p;
char str[100];
gets(str);
while(strcmp(str,"")!=0)
{
for(i=0;str[i]!=' ';i++){
word[n][i]=str[i];
}
word[n][i++]='\0';
strcpy(dialect[n],str+i);
e=ELFhash(dialect[n]);
p=(struct Node *)malloc(sizeof(struct Node));
p->hash=n;
p->next=link[e];
link[e]=p;
n++;
gets(str);
}
while(gets(str)!=NULL){
e=ELFhash(str);
p=link[e];
while(p!=NULL){//哈希冲突处理
if(strcmp(str,dialect[p->hash])==0)
break;
else
p=p->next;
}
if(!p)
printf("eh\n");
else
printf("%s\n",word[p->hash]);
}
return 0;
}