hdu 1247
来源:互联网 发布:淘宝货到付款合约中 编辑:程序博客网 时间:2024/05/09 12:16
http://acm.hdu.edu.cn/showproblem.php?pid=1247
#include"stdio.h"#include"stdlib.h"#include"string.h"#include"algorithm"using namespace std;char xx[50005][1001];struct Trie{struct Trie * next[26];int flag;};Trie * H = NULL;Trie * init(){Trie * t = new Trie;for(int i = 0;i < 26;i++){t ->next[i] = NULL;}t ->flag = 0;return t;}void Add(char * s){Trie * l = H;int len = strlen(s);for(int i = 0;i < len;i++){int k = s[i] - 'a';if(l ->next[k] == NULL){l ->next[k] = init();}l = l ->next[k];}l ->flag = 1; //用来标记单词存不存在 }int Cr(char * s,int x) //判断另一半 {Trie * l = H;int len = strlen(s);for(int i = x;i < len;i ++){int k = s[i] - 'a';if(l ->next[k] == NULL) //中间断了,直接退出 return 0;l = l ->next[k];}if(l ->flag) //只判断结尾有没有这个单词 return 1;elsereturn 0;}int Search(char * s) //查找单词 {Trie * l = H;int len = strlen(s);int pl = 0; //判断找没找到 for(int i = 0;i < len;i ++){int k = s[i] - 'a';if(l ->next[k] == NULL)return 0;if(l ->flag) //先找到前一半 {if(Cr(s,i)) //然后判断另一半 {pl = 1;return 1; //返回真直接找到,否则继续找 }}l = l->next[k];}if(pl) //找到了返回真 return 1;elsereturn 0;}void Cls(Trie * l) //清空数组 {for(int i = 0;i < 26;i ++){if(l ->next[i] != NULL){Cls(l ->next[i]);}}free(l);}int main(){int a,b,c,d = 0;H = init();while(~scanf("%s",xx[d ++])){Add(xx[d - 1]);}for(int i = 0;i < d;i ++){if(Search(xx[i]))puts(xx[i]);}return 0;}
0 0
- hdu 1247
- hdu 1247
- HDU 1247
- hdu 1247
- hdu 1247
- HDU 1247
- hdu 1247
- hdu 1247
- hdu-1247
- Hdu 1247
- hdu 1247
- HDU 1247 Trie树
- HDU-1247-Hats Words
- hdu 1247 字典树
- hdu 1247 字典树
- hdu 1247(字典树)
- hdu 1247 字典树
- HDU 1247 字典树
- 白:《数据在混合存储系统中的放置 》总结
- 【BZOJ】3155 Preprefix Sum
- java:String类的一些方法
- 解析MX记录
- UML——类图
- hdu 1247
- SharePoint online ClientContext
- Android的DrawerLayout全屏滑动显示
- Eclipse工程Tomcat Project与Web Project小记
- BZOJ 1911 特别行动队
- 分段选择控件、开关、滑竿
- Android中常用适配器理解及使用
- 发现新地球了!!
- AndroidQQ第三方登录个人详情获取