题目的意思:就像查找一本字典,根据输入的条目和要查询的单词,给出查询结果(每个单词长度不超过10)
刚开始用STL里面的map去做,结果华丽丽的TLE了,用了快排和二分去做
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int MAX=100001;
typedef struct
{
char a[11];
char b[11];
}Entry;
Entry entry[MAX];
int i=0;
int cmp(const void*a,const void*b)
{
return strcmp((*(Entry *)a).b, (*(Entry *)b).b);
}
int search(char c[])
{
int low=0;
int high=i-1;
int mid,temp;
while(low<=high)
{
mid=(low+high)/2;
temp=strcmp(entry[mid].b,c);
if(temp==0)
{
return mid;
}
else
{
if(temp==-1)
{
low=mid+1;
}
else
{
high=mid-1;
}
}
}
return -1;
}
int main()
{
char s[25];
int count=1;
while(gets(s))
{
if(s[0]=='\0')
{
break;
}
sscanf(s,"%s%s",entry[i].a,entry[i].b);
i++;
}
qsort(entry,i,sizeof(Entry),cmp);
while(gets(s))
{
count=search(s);
if(count==-1)
{
cout<<"eh"<<endl;
}
else
{
cout<<entry[count].a<<endl;
}
}
return 0;
}