本题可以用字典树解也可以用二分来解,这里参考一位大神的二分解法。(链接:http://blog.csdn.net/libin56842/article/details/38307085)
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct node
{
char s1[20],s2[20];
} a[100005];
int len;
int cmp(node a,node b)
{
return strcmp(a.s2,b.s2)<0;
}
int main()
{
len = 0;
int i,j;
char str[50];
while(gets(str))
{
if(str[0] == '\0')
break;
sscanf(str,"%s %s",a[len].s1,a[len].s2);
len++;
}
sort(a,a+len,cmp);
while(gets(str))
{
int l = 0,r= len-1,mid,flag = 1;
while(l<=r)
{
int mid = (l+r)>>1;
if(strcmp(str,a[mid].s2)==0)
{
printf("%s\n",a[mid].s1);
flag = 0;
break;
}
else if(strcmp(str,a[mid].s2)<0)
r = mid-1;
else
l = mid+1;
}
if(flag)
printf("eh\n");
}
return 0;
}