题意:一本词典,上面有外文词汇和对应的英文词汇。题目给出外文词,让翻译成英语。
思路:利用HASH建立词典,拿到需要翻译的词时,算出HASH值查找即可,若找不到则输出eh。注意与第一个词匹配的情况,这里WA了两次。。。。。。
#include<stdio.h>
#include<string.h>
#define MAX 1000003
char english[MAX][11],foreign[MAX][11];
char message[11];
int head[MAX],next[MAX];
int hash(char a[])
{
int i,v=0;
for(i=0;i<strlen(a);i++)
{
v=v*3+(a[i]-'a');
v%=2147423;
}
return v%MAX;
}
void Insert(char a[],int n)
{
int h,u;
h=hash(a);
u=head[h];
while(u)
{
u=next[u];
}
next[n]=head[h];
head[h]=n;
}
int isExist(char a[])
{
int h,u;
h=hash(a);
u=head[h];
if(!memcmp(a,foreign[u],sizeof(a)))return u;
while(u)
{
if(!memcmp(a,foreign[u],sizeof(a)))return u;
u=next[u];
}
return -1;
}
int main()
{
int i,j,k,flag;
char tmp[100];
i=j=0;
memset(head,0,sizeof(head));
memset(next,0,sizeof(next));
while(gets(tmp)!=NULL)
{
k=flag=0;
if(!strlen(tmp))break;
for(i=0;i<strlen(tmp);i++)
{
if(tmp[i]!=' '&&!flag)
{
english[j][i]=tmp[i];
}
else
{
flag=1;
english[j][i]='\0';
foreign[j][k++]=tmp[i+1];
}
}
Insert(foreign[j],j);
j++;
}
while(gets(message)!=NULL)
{
flag=isExist(message);
if(flag>=0)
{
printf("%s\n",english[flag]);
}
else
{
printf("eh\n");
}
}
return 0;
}