
字典问题
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行。 展开
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行。 展开
展开全部
既然你用了map <string,string> dic; 为什么不用dic.insert, dic.find函数来查找添加? 这个算法就跟用数组一个一个遍历没区别啊,当然会慢
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询