分析:不要被规模吓了,用快排和二分查找可以解决。
Code
#include <iostream>
using namespace std;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
int size=0;
struct word
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{ char English[11],FatMouse[11]; }dictionary[100006];
void InputWord(char* str)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
int len = strlen(str),i;
for(i=0;i<len;++i)
if(str[i] == ' ')
break;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
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)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
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)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{ return strcmp(((word*)l)->FatMouse,((word*)r)->FatMouse); }
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
int main()
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
char str[50];
while(gets(str),strlen(str)!=0)
InputWord(str),++size;
qsort(dictionary,size,sizeof(word),cmp);
while(cin>>str)
![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
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