题意:先构造一个词典,然后输入外文单词,输出相应的英语单词。

这道题有4种方法可以做:

1.map

2.字典树

3.快排+二分

4.hash表

参考博客:[解题报告]POJ_2503 字典树,MAP

参考博客:POJ2503两种解法:快速排序+二分查找与哈希表

思路1:可以使用map来做

代码:

#include<iostream>
#include<stdio.h>
#include<string>
#include<map>
using namespace std; map<string,bool>appear;//记录单词的存在
map<string,string>translate;//记录单词的翻译
int main(){
char s[40];
char english[20];
char foreign[20];
while(gets(s) && s[0]){
sscanf(s,"%s%s",english,foreign);
appear[foreign]=true;
translate[foreign]=english;
}
while(scanf("%s",s)!=EOF){//vc6.0中需要按两下ctrl+z才能结束循环
if(appear[s]) cout<<translate[s]<<endl;//string 不能用printf输出
else printf("eh\n");
}
return 0;
}

vc6.0中需要按两下ctrl+z才能结束循环?详见:EOF的使用

思路2:用字典树来做

代码:

#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std; const int MAX=26;
struct Trie {
Trie *next[MAX];
int v; //根据需要变化,1代表无此单词,-1代表有此单词
char english[20];
};
Trie *root=new Trie; char s[40];
char english[20];
char foreign[20];
char out[20];//存储要输出的内容 void createTrie(char *str){
int len = strlen(str);
Trie *p = root, *q;
for(int i=0; i<len; ++i){
int id = str[i]-'a';
if(p->next[id] == NULL){
// q = (Trie *)malloc(sizeof(Trie));
q = new Trie;
q->v = 1; //初始v==1
for(int j=0; j<MAX; ++j)
q->next[j] = NULL;
p->next[id] = q;
}
p = p->next[id];
}
p->v = -1; //若为结尾,则将v改成-1表示
strcpy(p->english,english);
}
int findTrie(char *str){
int len = strlen(str);
Trie *p = root;
for(int i=0; i<len; ++i){
int id = str[i]-'a';
p = p->next[id];
if(p == NULL) //若为空集,表示不存以此为前缀的串
return 0;
}
if(p->v == -1){
strcpy(out,p->english);
return 1; //存在单词
}
return 0;
} int main(){
int i;
for(i=0;i<MAX;i++)
root->next[i]=NULL; while(gets(s) && s[0]){
sscanf(s,"%s%s",english,foreign);
createTrie(foreign);
}
while(scanf("%s",s)!=EOF){//vc6.0中需要按两下ctrl+z才能结束循环 if(findTrie(s)==1) printf("%s\n",out);
else printf("eh\n");
}
return 0;
}

思路3:快排+二分

代码:

思路4:hash表

代码:

POJ 2503 Babelfish(map,字典树,快排+二分,hash)的更多相关文章

  1. poj 2503:Babelfish(字典树,经典题,字典翻译)

    Babelfish Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 30816   Accepted: 13283 Descr ...

  2. poj 2503 Babelfish(字典树哈希)

    Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 29059 Accepted: 12565 Description You hav ...

  3. poj 2503 Babelfish(Map、Hash、字典树)

    题目链接:http://poj.org/bbs?problem_id=2503 思路分析: 题目数据数据量为10^5, 为查找问题,使用Hash或Map等查找树可以解决,也可以使用字典树查找. 代码( ...

  4. Poj 2503 Babelfish(Map操作)

    一.Description You have just moved from Waterloo to a big city. The people here speak an incomprehens ...

  5. poj 2503 Babelfish(字典树或map或哈希或排序二分)

    输入若干组对应关系,然后输入应该单词,输出对应的单词,如果没有对应的输出eh 此题的做法非常多,很多人用了字典树,还有有用hash的,也有用了排序加二分的(感觉这种方法时间效率最差了),这里我参考了M ...

  6. POJ 2001 Shortest Prefixes(字典树)

    题目地址:POJ 2001 考察的字典树,利用的是建树时将每个点仅仅要走过就累加.最后从根节点開始遍历,当遍历到仅仅有1次走过的时候,就说明这个地方是最短的独立前缀.然后记录下长度,输出就可以. 代码 ...

  7. poj 2503 哈希 Map 字典树

    Babelfish Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 36967   Accepted: 15749 Descr ...

  8. poj 2503 Babelfish(字典树或着STL)

    Babelfish Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 35828   Accepted: 15320 Descr ...

  9. POJ 1002 487-3279(字典树/map映射)

    487-3279 Time Limit: 2000MS        Memory Limit: 65536K Total Submissions: 309257        Accepted: 5 ...

随机推荐

  1. 利用DataSet部分功能实现网站登录

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  2. 电容有什么作用?为什么cpu电源引脚都并联一个电容?

    管理 随笔- 17  文章- 1  评论- 1  电容有什么作用?为什么cpu电源引脚都并联一个电容?   正文: 参考资料:http://blog.sina.com.cn/s/blog_7880d3 ...

  3. request获取数据的几种方法

    1.request.getparameter(); String value=request.getparameter("key"); 2.request.getParameter ...

  4. UML类图简明教程

    作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells Github:https://github.co ...

  5. Java设计模式(九)责任链模式 命令模式

    (十七)责任链模式 责任链模式的目的是通过给予多个对象处理请求的机会,已解除请求发送者与接受者之间的耦合关系.面对对象的开发力求对象之前保持松散耦合,确保对象各自的责任最小化.这种设计能够使得系统更加 ...

  6. TRUNCATE 不能引发触发器

    我在使用phpmyadmin清空时发现这个问题

  7. Proving Equivalences (hdu 2767 强联通缩点)

    Proving Equivalences Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  8. Excel COM组件使用的注意事项和一些权限问题(转载)

    1.实例化Excel的COM组件的时候,不要直接调用类,要用Microsoft提供的接口 原来的写法:Excel.ApplicationClass excelApp = new Excel.Appli ...

  9. MySQL数据库的常见操作(七)

    MySQL数据库的常见操作 1.创建数据库 2.创建重名的数据库以及如何查看警告信息 3.设置数据库的编码方式(默认为utf8) 4.修改和查看数据库的编码方式 5.删除数据库 6.6.删除已经删除了 ...

  10. Javaweb之 servlet 开发具体解释1

    1.1  Tip:Servlet简单介绍 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发 ...