HDU
来源:互联网 发布:购买了域名怎么使用 编辑:程序博客网 时间:2024/06/06 07:32
之前用hash做过这题后面想一下其实字典树也是一样的
只要把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; } }}
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- zookeeper实现三地分中心容灾小结:监听API选择,秒级切换,网络抖动
- Linux环境变量
- Web开发、原生开发、混合开发的区别优势:
- 关于javax.servlet.ServletException: java.lang.IllegalStateException: No WebEnvironment found: no Envir
- 汽水瓶
- HDU
- Spring Dubbo整合开发
- GYM 100712 E.Epic Professor(水~)
- shp转化为json
- poj1321 棋盘问题
- Android studio下gradle打包
- Centos6没有GUI的情况下使用matplotlib绘图
- Fragment详解之四——管理Fragment(2)
- R语言 利用随机森林预测股票走势<一>