HDU - 1247 Hat’s Words(Trie 字典树)
2017-03-13 16:51
405 查看
之前用hash做过这题后面想一下其实字典树也是一样的
只要把hash的建立过程替换成建立字典树就可以了速度上更快一点
不过空间消耗大。
hash链接->hash AC代码
字典树AC代码
只要把hash的建立过程替换成建立字典树就可以了速度上更快一点
不过空间消耗大。
hash链接->hash AC代码
字典树AC代码
#include<stdio.h> #include<string.h> struct Trie { struct node { int flag; int next[26]; void init() { for(int i=0;i<26;i++) next[i]=-1; } }; int top; node p[100050]; void init() { p[0].init(); top=1; } void insert(char *s) { int pp=0; for(int i=0;s[i];i++) { if(p[pp].next[s[i]-'a']==-1) { p[pp].next[s[i]-'a']=top; p[top].init(); top++; } pp=p[pp].next[s[i]-'a']; } p[pp].flag=1; } bool query(char *s) { int pp=0; for(int i=0;s[i];i++) { if(p[pp].next[s[i]-'a']==-1) return false; pp=p[pp].next[s[i]-'a']; } return pp!=-1&&p[pp].flag; } }T; char a[100010][20]; int main() { T.init(); int cnt=0; while(scanf("%s",a[cnt])==1&&a[cnt][0]!='\0') { T.insert(a[cnt]); cnt++; } char s1[20],s2[20]; for(int i=0;i<cnt;i++) { int flog=0; for(int j=0;j<a[i][j+1]!='\0';j++) { s1[j]=a[i][j]; s1[j+1]='\0'; if(T.query(s1)) { int k; for(k=0;a[i][j+k+1]!='\0';k++) s2[k]=a[i][j+k+1]; s2[k]='\0'; if(T.query(s2)) { printf("%s\n",a[i]); flog=1; break; } } if(flog) break; } } }
相关文章推荐
- HDU 1247 Hat’s Words(字典树Trie)
- HDU 1247 Hat’s Words(字典树Trie)
- HDU-1247 Hat’s Words (Trie 字典树)
- 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 [Trie 图]
- hdu 1247 Hat’s Words(字典树)
- HDU 1247 Hat’s Words (字典树 && map)
- hdu 1247 Hat’s Words(dfs+trie)
- hdu 1247 Hat’s Words 字典树
- hdu 1247 Hat’s Words (字典树)
- hdu 1247 Hat’s Words(字典树)
- HDU_1247 Hat’s Words(Trie 树)
- HDU 1247 Hat’s Words(字典树变形)
- 字典树——Hdu 1247 Hat’s Words
- HDu-1247 Hat’s Words,字典树裸模板!
- HDU 1247 Hat’s Words (字典树)