如题: http://poj.org/problem?id=2503
一行输入2个字符串,第一个是一种语言表示,第二个是另一种语言表示,但他们的意思相同,只是表达不同。建完字典后,输入第2种语言的单词,输出第一种语言的表示方法。如果没有这个单词,输出eh
用ELFhash表做,使用开放散列。
ELFhash表具体解释,见我上一篇。
#include<iostream>
#include<cstring>
//#define MOD 0x7fffffff
#define M 100003
int ELFHash(char * key)
{
unsigned long h=0;
while(*key)
{
h=(h<<4)+*key++;
unsigned long g=h&0xf0000000L;
if(g)
{
h^=(g>>24);
h&=~g;
}
}
return h%M;
}
struct node
{
int hash;
struct node * next;
}* Link[M]={NULL};
char word[M][11];
char dialect[M][11];
int main()
{
int i,e,n=0;
char str[50];
struct node * p;
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=new 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;
}
p=p->next;
}
if(p==NULL)
printf("eh\n");
else
printf("%s\n",word[p->hash]);
}
return 0;
}