Babelfish+poj+字典树
来源:互联网 发布:如何判断数据的优劣 编辑:程序博客网 时间:2024/05/29 03:25
Babelfish
Time Limit: 3000MS Memory Limit: 65536KTotal Submissions: 32392 Accepted: 13929
Description
You have just moved from Waterloo to a big city. The people here speak an incomprehensible dialect of a foreign language. Fortunately, you have a dictionary to help you understand them.
Input
Input consists of up to 100,000 dictionary entries, followed by a blank line, followed by a message of up to 100,000 words. Each dictionary entry is a line containing an English word, followed by a space and a foreign language word. No foreign word appears more than once in the dictionary. The message is a sequence of words in the foreign language, one word on each line. Each word in the input is a sequence of at most 10 lowercase letters.
Output
Output is the message translated to English, one word per line. Foreign words not in the dictionary should be translated as "eh".
Sample Input
dog ogdaycat atcaypig igpayfroot ootfrayloops oopslayatcayittenkayoopslay
Sample Output
catehloops
解决方案:该此题用上字典树效率蛮高的,我用的是孩子兄弟建树法,head指向孩子节点,next指向兄弟节点。w了几次,发现自己定义的最大节点个数少了,最大节点个数应为(单词个数)*(最长单词长度);
code:#include<iostream>#include<cstdio>#include<cstring>#define MMAX 1000003using namespace std;int head[MMAX];///指向左孩子int next[MMAX];///指向兄弟节点char word[MMAX];int sz;char ke[MMAX][15];int val[MMAX];void Insert(char *w,char *key){ int u=0,v; int len=strlen(w); for(int i=0; i<len; i++) { for(v=head[u]; v; v=next[v]) { if(word[v]==w[i]) break; } if(!v) { v=sz++; next[v]=head[u]; head[u]=v; head[v]=0; val[v]=0; word[v]=w[i]; } u=v; } val[v]=1; strcpy(ke[v],key);}void query(char *Find){ int len=strlen(Find); int u=0,v; bool flag=true; for(int i=0; i<len; i++) { for(v=head[u]; v; v=next[v]) { if(Find[i]==word[v]) break; } if(!v) { flag=false; break; } u=v; } if(!flag||!val[v]) { printf("eh\n"); } else { printf("%s\n",ke[v]); }}int main(){ char word[40],kk1[15],kk[15]; memset(head,0,sizeof(head)); memset(next,0,sizeof(next)); memset(val,0,sizeof(val)); sz=1; while(gets(word)&&word[0]!='\0') { sscanf(word,"%s %s",kk1,kk); Insert(kk,kk1); } while(gets(kk)&&kk[0]!='\0') { query(kk); } return 0;}
0 0
- Babelfish+poj+字典树
- poj 2503 Babelfish(字典树)
- poj 2503 Babelfish 字典树
- poj 2503 Babelfish(字典树)
- POJ 2503 Babelfish(字典树)
- poj-2503-Babelfish-字典树
- poj 2503 Babelfish(字典树)
- POJ 2503 - Babelfish(字典树)
- poj 2503 Babelfish 字典树
- POJ 2503-Babelfish【字典树】
- POJ 2503 Babelfish 字典树应用
- POJ 2503 Babelfish(字典树Trie)
- POJ - 2503 Babelfish 字典树做法
- POJ 2503 Babelfish(字典树)
- poj 2503 Babelfish(字典树)
- poj 2503 Babelfish(字典树·翻译)
- POJ - 2503 - Babelfish(字典树)
- POJ 2503 Babelfish 字典树入门题
- hdu 2152 Fruit
- Eclipse快捷键大全
- apache集群配置负载均衡
- 【线段树】HDU 1166---敌兵布阵
- ELF文件格式实例解析
- Babelfish+poj+字典树
- 只是打印素数而已
- water(这里都是水题,直到把oj某几面刷完)
- C++11新特性:final和override 子类重写父类方法
- 设计模式-行为模式(读书笔记)
- flv视频封装格式详解
- 【源代码】移动视频通话的JAVA源代码
- SVN服务器搭建
- HDU4920矩阵乘法优化之转置