寒假训练--字典树--B - Compound Words
来源:互联网 发布:韶关网络布线方案 编辑:程序博客网 时间:2024/06/16 23:05
Problem E: Compound Words
You are to find all the two-word compound words in a dictionary. A two-word compound word is a word in the dictionary that is the concatenation of exactly two other words in the dictionary.
Input
Standard input consists of a number of lowercase words, one per line, in alphabetical order. There will be no more than 120,000 words.
Output
Your output should contain all the compound words, one per line, in alphabetical order.
Sample Input
aalienbornlesslienneverneverthelessnewnewbornthezebra
Sample Output
aliennewborn
寻找是有两个字符串组合成的字符串,并输出,先建树,再查找时,如果遇到flag= 1 ,就跳到另一个函数里 继续查找, 如果最后仍是flag= 1 那这个字符串就是由这两个flag= 1 的字符串组成 应该输出, 如果没找到,应该退回一开始的函数里,寻找下一个flag= 1 的点,继续查找
#include <stdio.h>#include <string.h>char s[120010][50] ;struct node{ int flag ; node *next[26] ;};struct node *newnode(){ node *p = new node ; p->flag = 0; for(int i = 0 ; i < 26 ; i++) p->next[i] = NULL ; return p;}void gettree(node *root,char *s){ int i , l = strlen(s) ; node *p = root ; for(i = 0 ; i < l ; i++) { int k = s[i] - 'a' ; if(p->next[k]==NULL) p->next[k] = newnode(); p = p->next[k] ; } p->flag = 1 ;}int ff(node *root,char *s,int i, int l){ node *p = root ; for( ; i < l ; i++) { int k = s[i] - 'a' ; if(p->next[k] == NULL) return 0; p = p->next[k] ; } if(p->flag) { printf("%s\n", s); return 1; } return 0;}void f(node *root,char *s){ int i , l = strlen(s) ; node *p = root ; for(i = 0 ; i < l ; i++) { int k = s[i] - 'a' ; if(p->next[k] == NULL) return ; p = p->next[k] ; if(p->flag) if(ff(root,s,i+1,l))return; }}int main(){ int i , n = 0 ; node *head ; while(scanf("%s", s[n++])!=EOF) { } n--; head = newnode(); for(i = 0 ; i < n ; i++) gettree(head,s[i]); for(i = 0 ; i < n ; i++) f(head,s[i]);}
0 0
- 寒假训练--字典树--B - Compound Words
- 寒假训练--字典树--Message Flood
- 寒假训练--字典树--A - Immediate Decodability
- 2016寒假训练——字典树
- 2016寒假训练——字典树
- Compound Words
- Compound Words
- Compound Words
- Compound Words
- Compound Words
- zoj 1825 Compound Words
- uva 10391 compound words
- UVa 10391 - Compound Words
- uva 10391 - Compound Words
- uva 10391 - Compound Words
- UVa 10391 - Compound Words
- UVa 10391 - Compound Words
- Compound Words 10391
- iOS KVO 观察者模式实现方式
- 一个完整的数据库操作
- 初学UML
- 《高效学习OpenGL》之 其他裁剪平面 glClipPlane()
- 孩子羽球巨大的进步
- 寒假训练--字典树--B - Compound Words
- Google首席软件工程师Joshua Bloch谈如何设计一款优秀的API
- Oracle中dual表的用途介绍
- B - Lever
- 什么是程序员的优秀品质?
- TexturePacker 制作NGUI Atla
- 国内从事计算机视觉(CV)领域的公司
- 调用CreateProcess()之后,如何等待子进程初始化完毕。
- JVM 内存结构