分析:不要被规模吓了,用快排和二分查找可以解决。

Code
#include <iostream>
using namespace std;

int size=0;
struct word


{ char English[11],FatMouse[11]; }dictionary[100006];
void InputWord(char* str)


{
int len = strlen(str),i;
for(i=0;i<len;++i)
if(str[i] == ' ')
break;

strncpy(dictionary[size].English,str,i);
dictionary[size].English[i] = '\0';
len = len-i-1;
strncpy(dictionary[size].FatMouse,str+i+1,len);
dictionary[size].FatMouse[len] = '\0';
}
char* BinarySearch(int begin,int end,char* str)


{
if(begin>end)
return 0;
int mid = (begin + end)/2;
int flag;
if((flag=strcmp(dictionary[mid].FatMouse,str)) == 0)
return dictionary[mid].English;
if(flag<0)
return BinarySearch(mid+1,end,str);
else
return BinarySearch(begin,mid-1,str);
}
int cmp(const void* l,const void* r)


{ return strcmp(((word*)l)->FatMouse,((word*)r)->FatMouse); }

int main()


{
char str[50];
while(gets(str),strlen(str)!=0)
InputWord(str),++size;
qsort(dictionary,size,sizeof(word),cmp);
while(cin>>str)

{
char* w = BinarySearch(0,size-1,str);
cout<<(w?w:"eh")<<endl;
}
return 0;
}

转载于:https://www.cnblogs.com/jaskist/archive/2009/05/02/1447760.html