分析:不要被规模吓了,用快排和二分查找可以解决。
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 ;
}
posted @
2009-05-02 13:30
黄浩贤
阅读(
189 )
评论()
编辑
收藏
举报