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

这道题有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. 国内云引擎平台概览——新浪SAE,阿里ACE,百度BCE

    新浪SAE 平时大家的測试server都是执行在自己的PC上面,用Tomcat或者IIS搭建的本机server. 事实上新浪云平台SinaAppEngine也是挺好用的. 今天总结一下我使用过程中的一 ...

  2. Node.js学习笔记(5)——关于child_process模块

    child_process是node一个比较重要的模块,通过它可以实现创建多线程,来利用多核CPU. 这个模块提供了四个创建子进程的函数. spawn.exec.execFile.fork. spaw ...

  3. Nook 2 Root

        最后我还是忍不住root了它,用了差一点够一个月 1.备份2.root 3.装软件=====================================================1. ...

  4. github 迁移google code 项目

    本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46692181 转载请一定注明出处. 1,关于google code google ...

  5. svn自动部署

    版本库目录hooks下创建post-commit.bat TortoiseProc.exe /command:update /path:"E:\web_server\sial\" ...

  6. 使用Chrome(PC)调试移动设备上的网页

    最早开始调试移动端网页时,本人都是采取PC上改几行代码,手机上刷新一下看效果这种笨方法来开发的,效率低而且容易让人抓狂.最近偶然发现原来可以使用PC上的浏览器来调试移动设备,不由得感叹相逢恨晚. 工具 ...

  7. 11-利用session校验图片认证码

    /****************************************************************产生随机验证码的servlet******************** ...

  8. Intellij IDEA如何不显示参数提示

    刚安装了IDEA之后,调用方法的时候会提示方法中的参数,就像下面这样: 虽然IDEA也是好心,提示,但是劳资看着难受啊. 如果觉得不习惯,不想看参数名,可以用下图的方式取消.具体是:  setting ...

  9. javascript调试常用工具讲解

    .Console命令详解,让调试js代码变得更简单 2.<Firebug入门指南>

  10. 【TensorFlow-windows】(七) CNN之VGG-net的测试

    主要内容: 1.CNN之VGG-net的测试 2.该实现中的函数总结 平台: 1.windows 10 64位 2.Anaconda3-4.2.0-Windows-x86_64.exe (当时TF还不 ...