Description
Input
Output
Sample Input
dog ogday cat atcay pig igpay froot ootfray loops oopslay atcay ittenkay oopslay
Sample Output
cat eh loops
Hint
给出每两个字符串,它们代表相同意思的不同语言,给出一种语言的意思,将其转换成另一种语言,如果没有找到,输出“eh”。
解题思路:本题最好采用字典树,估计用时较少,我采用的是二分查找,用时700ms。
代码如下:C/C++代码
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct node
{
char s1[20],s2[20];
} a[100005];
int cmp(node a,node b)
{
return strcmp(a.s2,b.s2)<0;
}
int main()
{
int i,j,low,mid,high,flag=1,len = 0;
char s[50];
while(gets(s))
{
if(strlen(s)==0)
break;
sscanf(s,"%s%s",a[len].s1,a[len].s2);
len++;
}
sort(a,a+len,cmp);//按字典序排序
//二分查找
while(gets(s))
{
low=0;
high=len-1;
flag=1;
while(low<=high)
{
int mid =(low+high)>>1;
if(strcmp(s,a[mid].s2)==0)
{
printf("%s\n",a[mid].s1);
flag = 0;
break;
}
else if(strcmp(s,a[mid].s2)>0)
low=mid+1;
else
high=mid-1;
}
if(flag)
printf("eh\n");
}
return 0;
}
原文地址:http://blog.csdn.net/yanghuaqings/article/details/38435981