poj2503 哈希表

来源:互联网 发布:淘宝新手怎样增加粉丝 编辑:程序博客网 时间:2024/04/28 12:09

 

 

 如题: 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;
}

 

0 0
原创粉丝点击