原文:http://blog.acmj1991.com/?p=640
题意:给你一些英语单词和这些单词翻译成其他语言时的单词,在后面给你一些其他语言的单词,看能否用字典来翻译。
思路:就是查找在字典中是否存在这些单词,有几种方法可以对单词进行hash,排序,以及建立字典树
这题的输入实在让人纠结……
对单词hash,速度快不快就看哈hash函数的水平了 200+ms
#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
#define maxN 100010
#define A 1000000
int head[10*maxN];
struct node{
char s[11],s1[11];
int next;
}po[maxN];
void add(char *str,char *str1,int i)
{
int m=1,len=strlen(str);
for(int i=0;i<len;i++)m=(m*str[i])%A;
strcpy(po[i].s,str);
strcpy(po[i].s1,str1);
po[i].next=head[m],head[m]=i;
}
int main()
{
freopen("1.txt","r",stdin);
char str[25],str2[11],str1[11];
int num=0;
memset(head,-1,sizeof(head));
while(gets(str)&&strcmp(str,"")!=0)
{
int i,len=strlen(str);
for(i=0;i<len;i++)
if(str[i]==' '){
str[i]='\0';
break;
}
strcpy(str1,str);
strcpy(str2,str+(i+1));
add(str2,str1,num++);
}
while(scanf("%s",str)!=EOF)
{
int h,m=1,len=strlen(str);
for(int i=0;i<len;i++)m=(m*str[i])%A;
h=head[m];
while(1)
{
if(h==-1){printf("eh\n");break;}
if(strcmp(po[h].s,str)==0){
printf("%s\n",po[h].s1);
break;
}
h=po[h].next;
}
}
}