hdu 1247 Hat’s Words(字典树)
来源:互联网 发布:中国有多强大 知乎 编辑:程序博客网 时间:2024/06/13 23:18
我以为像a、aa这样的输入应该是没有输出的,结果还是要输出aa。
建树的时候就是常规建树,不过查找的时候要做一些变形:对于一个单词,从第一位检查有没有单词是它的前缀,如果有的话,再去检查它的后半部分是不是一个独立的单词,要满足这两次查找才能输出。
老是从自己写的字典树里面闻出一种山寨的味道。
#include<stdio.h>#include<string.h>#include<malloc.h>#define N 50005char s[N][30];struct node{ node *a[26]; int flag; int id;};node *root;void InsertTree(char *ss){ int i,ln; node *cur,*s; ln=strlen(ss); cur=root; for(i=0;i<ln;i++) { int temp; temp=ss[i]-'a'; if(i==ln-1) { if(cur->a[temp]!=NULL) cur->a[temp]->flag=1; else { s=(node *)malloc(sizeof(node)); memset(s->a,0,sizeof(s->a)); s->flag=1; s->id=-1; cur->a[temp]=s; } } else if(cur->a[temp]!=NULL) cur=cur->a[temp]; else { s=(node *)malloc(sizeof(node)); memset(s->a,0,sizeof(s->a)); s->id=-1; s->flag=0; cur->a[temp]=s; cur=s; } } return ;}int FindTree(char *s,int flag,int k){ int i,ln; node *cur; cur=root; ln=strlen(s); if(!flag) { for(i=0;i<ln;i++) { int temp=s[i]-'a'; if(cur->a[temp]!=NULL) { if(cur->a[temp]->flag) { cur->a[temp]->id=k; if(FindTree(s+i+1,1,k)==2) return 1; } cur=cur->a[temp]; } else return 0; } } else { for(i=0;i<ln;i++) { int temp=s[i]-'a'; if(i==ln-1) { if(cur->a[temp]!=NULL/*&&cur->a[temp]->id!=k*/&&cur->a[temp]->flag) return 2; else return 0; } else if(cur->a[temp]!=NULL) cur=cur->a[temp]; else return 0; } } return flag;}int main(){ int k=0; root=(node *)malloc(sizeof(node)); memset(root->a,0,sizeof(root->a)); root->flag=0; root->id=-1; while(gets(s[k])) { InsertTree(s[k]); k++; } int i; for(i=0;i<k;i++) { if(FindTree(s[i],0,i)) puts(s[i]); } return 0;}
- HDU 1247 Hat’s Words(字典树)
- hdu 1247 字典树 Hat’s Words
- HDU 1247 Hat’s Words 字典树
- hdu 1247 Hat’s Words 字典树
- HDU 1247 Hat’s Words(字典树)
- hdu 1247 Hat’s Words(字典树)
- hdu 1247 Hat’s Words字典树
- hdu 1247 Hat’s Words(字典树)
- hdu 1247 Hat’s Words 字典树
- 【字典树】HDU 1247 Hat’s Words
- HDU--1247:Hat’s Words (字典树)
- hdu 1247 Hat’s Words(字典树)
- [字典树] HDU 1247 - Hat’s Words
- hdu 1247 Hat’s Words (字典树)
- HDU 1247 Hat’s Words 字典树
- HDU - 1247 Hat’s Words(字典树)
- hdu 1247 Hat’s Words 字典树
- hdu 1247 Hat’s Words(字典树)
- log4j使用心得之二 -- log4j配置相对路径日志
- POJ3525+半平面交
- Linq本质论(1)
- openwrt mentohust tp-WR703
- 使用Java进行远程方法调用的几个方案及比较
- hdu 1247 Hat’s Words(字典树)
- R语言基础-矩阵和列表
- 轻松10步本地安装WordPress(图)
- Fortran使用隐形DO循环和reshape给一维和多维数组赋初值
- 将512字节写图片,后跟指令==调指令,必调图片==用方块儿或图片调指令。
- 企业各个职位英语缩写
- jquery的性能优化,你知道几条
- 走进Boost [Boost 使用入门]
- hdu 4251 The Famous ICPC Team Again