字典问题

ProblemC:词典TimeLimit:3000MSMemoryLimit:65536KTotalSubmit:4120Accepted:1222Description... Problem C:词典
Time Limit:3000MS Memory Limit:65536K
Total Submit:4120 Accepted:1222

Description
你旅游到了一个国外的城市。那里的人们说的外国语言你不能理解。不过幸运的是,你有一本词典可以帮助你。

Input
首先输入一个词典,词典中包含不超过100000个词条,每个词条占据一行。每一个词条包括一个英文单词和一个外语单词,两个单词之间用一个空格隔开。而且在词典中不会有某个外语单词出现超过两次。词典之后是一个空行,然后给出一个由外语单词组成的文档,文档不超过100000行,而且每行只包括一个外语单词。输入中出现单词只包括小写字母,而且长度不会超过10。

Output
在输出中,你需要把输入文档翻译成英文,每行输出一个英文单词。如果某个外语单词不在词典中,就把这个单词翻译成“eh”。

Sample Input

dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay

atcay
ittenkay
oopslay

Sample Output

cat
eh
loops

Hint
输入比较大,推荐使用C语言的I / O函数。
我的程序如下
#include <iostream>
#include <map>
#include <string>
using namespace std;

int main()
{
map <string,string> dic;
string s1,s2,s;
char a[11],b[11],c[100001][11];
int i=1,m;
while (scanf("%s%s", a, b))
{
s1=a;
s2=b;
dic[s2]=s1;
cin.ignore();
if (cin.peek()=='\n')
break;

}
while (scanf("%s",c[i]))
{
cin.ignore();
if (cin.peek()=='\n')
break;
i++;
}
m=i;
for (i=1;i<=m;i++)
{
s=c[i];
if (dic[s]=="")
printf("eh\n");
else
cout << dic[s] << endl;
}
return 0;
}

但是还是超时了,那位高手给个更快的做法????
只能用c的i/o才来得及,太大了100000行。
展开
 我来答
zyq_07_28
2008-12-04 · TA获得超过258个赞
知道小有建树答主
回答量:185
采纳率:0%
帮助的人:0
展开全部
既然你用了map <string,string> dic; 为什么不用dic.insert, dic.find函数来查找添加? 这个算法就跟用数组一个一个遍历没区别啊,当然会慢
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式