题目描述
众所周知,Mr.Zeng 不会说英语,他会使用 A 语言。因为我们的国家已经加入世贸组织,他感受到了压力,已经在开始学习英语。现在需要你用计算机来帮助他做一些翻译工作。
输入格式
输入 N(1≤N≤100005)个词典条目,每个字典条目占一行,分别包含一个英语单词、一个空格和一个该英语单词对应的A语言单词。词典中每个 A 语言单词出现一次。
接着一个空行。
然后是多达M(1≤M≤100005)个需要翻译的A语言单词,每行一个单词。
输入的每个单词最多 10 个小写字母。
输出格式
对于每个 A 语言单词,请你在输入的词典中找出它对应的英语单词,每行一个单词。
如果 A 语言单词在词典中没出现,就输出“eh”。
样例数据 1
输入
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay
atcay
ittenkay
oopslay
输出
cat
eh
众所周知,Mr.Zeng 不会说英语,他会使用 A 语言。因为我们的国家已经加入世贸组织,他感受到了压力,已经在开始学习英语。现在需要你用计算机来帮助他做一些翻译工作。
输入格式
输入 N(1≤N≤100005)个词典条目,每个字典条目占一行,分别包含一个英语单词、一个空格和一个该英语单词对应的A语言单词。词典中每个 A 语言单词出现一次。
接着一个空行。
然后是多达M(1≤M≤100005)个需要翻译的A语言单词,每行一个单词。
输入的每个单词最多 10 个小写字母。
输出格式
对于每个 A 语言单词,请你在输入的词典中找出它对应的英语单词,每行一个单词。
如果 A 语言单词在词典中没出现,就输出“eh”。
样例数据 1
输入
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay
atcay
ittenkay
oopslay
输出
cat
eh
loops
记录一下这道题的易错点
这个输入sscanf那句,很巧妙,很简单的就把char数组s转化成两个char数组——p和q
另外 这道题似乎也可以用map来实现
#include<bits/stdc++.h>
using namespace std;
char s[15];
int n=0;
char p[15],q[15];
struct data
{
string english;
string a;
}List[100005];
bool cmp(data a,data b)
{
return a.a<b.a;
}
int main()
{
while(gets(s))
{
if(!strlen(s)) break;
sscanf(s,"%s%s",p,q);
List[++n].english=p;
List[n].a=q;
}
sort(List+1,List+n+1,cmp);
int flag=0;
while(gets(s))
{
int l=0,r=n,mid;
flag=0;
while(l<=r)
{
mid=(l+r)/2;
if(List[mid].a==s)
{
flag=1;
break;
}
if(List[mid].a>s) r=mid-1;
if(List[mid].a<s) l=mid+1;
}
if(flag==0)
{
cout<<"eh"<<endl;
}
else
{
cout<<List[mid].english<<endl;
}
}
return 0;
}