poj 2503 Babelfish(字典树·翻译)
2015-08-30 20:44
239 查看
题目:http://poj.org/problem?id=2503
分析:这和hdu 1075 what are you talking about 很像,甚至比它还要简单。就是利用字典树进行单词翻译。
Language: Default Babelfish
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 ogday cat atcay pig igpay froot ootfray loops oopslay atcay ittenkay oopslay Sample Output cat eh loops Hint Huge input and output,scanf and printf are recommended. |
#include <iostream> #include <cstdio> #include <cstring> using namespace std; struct node{ bool cover; char word[15]; node *next[26]; node(){ cover=0; memset(word,0,sizeof(word)); memset(next,0,sizeof(next)); } }; node *root; void insert(char *s1,char *s2){ node *p=root; int length=strlen(s2); for(int i=0;i<length;i++){ if(p->next[s2[i]-'a']==0) p->next[s2[i]-'a']=new node(); p=p->next[s2[i]-'a']; } p->cover=1; strcpy(p->word,s1); } void del(node *p){ if(p==NULL){ return ; } for(int i=0;i<26;i++) del(p->next[i]); delete p; } char* query(char *s){ int length=strlen(s); node *p=root; for(int i=0;i<length;i++){ if(p->next[s[i]-'a']==0) return 0; p=p->next[s[i]-'a']; } if(p->cover) return p->word; return 0; } char str[30],s1[15],s2[15]; void strcpy(char *s,char *f,int start,int end){ for(int i=start;i<=end;i++){ s[i-start]=f[i]; } s[end-start+1]=0; } int main() { //freopen("cin.txt","r",stdin); root=new node(); while(gets(str)){ int length1,slen=strlen(str); //slen=0意味着空行 if(slen==0) break; for(int i=0;i<slen;i++){ if(str[i]==' '){ length1=i; break; } } strcpy(s1,str,0,length1-1); strcpy(s2,str,length1+1,slen-1); //cout<<s1<<" "<<s2<<endl; insert(s1,s2); } while(~scanf("%s",s1)){ char *ans=query(s1); //返回字符串 if(ans) printf("%s\n",ans); else printf("eh\n"); } del(root); return 0; }
相关文章推荐
- Note For Linux By Jes(20)-Linux 核心编译与管理
- 【J2SE】配置JDK环境变量
- 关于分布式系统的数据一致性问题(二)
- 2 JavaWeb之Mac下配置Tomcat
- Idol之坑
- UVA 1252 十五 Twenty Questions
- JAVA练级之路(二)--- JAVA入门
- 5 个很好的 Python 面试题
- Java中垃圾回收和静态类型
- DFS求迷宫问题
- Note For Linux By Jes(19)-Linux 备份策略
- Jquery对象的文档处理,CSS和事件
- C#【堆与栈 值类型 引用类型】
- UVA 1291 十四 Dance Dance Revolution
- js 显示现在时间 自制函数
- JavaScript学习笔记3-JavaScript定义对象的四种方式
- 15个 MySQL 基础面试题,DBA 们准备好了吗?
- 关于分布式系统的数据一致性问题(一)
- Android控件之TimePickerDialog、DatePickerDialog和自定义DialogPopupWindow与NotificationManager
- Maya人物骨骼创建与蒙皮