开始以为枚举会超时,因为有50000的词。后来试了一发就过了。哈哈。枚举没一个单词,将单词拆为2半,如果2半都出现过,那就是要求的。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct trie
{trie *next[26];int flag;
};
trie *root;
void init()
{int i;root=(trie*)malloc(sizeof(trie));for(i=0;i<26;i++)root->next[i]=NULL;root->flag=0;
}
void insert(char *str)
{int i,j,len=strlen(str);trie *p=root,*q;for(i=0;i<len;i++){int id=str[i]-'a';if(p->next[id]==NULL){q=(trie*)malloc(sizeof(trie));for(j=0;j<26;j++)q->next[j]=NULL;q->flag=0;p->next[id]=q;}p=p->next[id];if(i==len-1){p->flag=1;}}
}
int query(char *str)
{int i,j,len=strlen(str);trie *p=root;for(i=0;i<len;i++){int id=str[i]-'a';if(p->next[id]==NULL)return 0;p=p->next[id];}if(p->flag>0)return 1;return 0;
}
char str[50001][30];
int main()
{int i,j,count=0;int flag;init();while(gets(str[count])){if(strcmp(str[count],"")==0)break;insert(str[count]);count++;}for(i=0;i<count;i++){if(strlen(str[i])==1)continue;char s1[16],s2[16];int l1,l2,k;int l=strlen(str[i]);for(j=1;j<l;j++)//枚举单词,将单词一分为二,查询是否都出现。如果是这个单词就ok了。
        {flag=0;l1=l2=0;for(k=0;k<j;k++)//左子串
            {s1[l1]=str[i][k];l1++;}s1[l1]='\0';for(k=j;k<l;k++)//右边子串
            {s2[l2]=str[i][k];l2++;}s2[l2]='\0';if(query(s1)&&query(s2))//查询
            {flag=1;break;}}if(flag)printf("%s\n",str[i]);}return 0;
}

转载于:https://www.cnblogs.com/sweat123/p/4689533.html

hdu1247 字典树相关推荐

  1. hdu1247 字典树或者hash

    题意:      给你一些串,问你哪些串是由其他两个串连接成的. 思路:        我用了两种方法,一个是hash,hash的时候用map实现的,第二种方法是字典树,字典树我们枚举每个一字符串,查 ...

  2. HDU1247 字典树 Hat’s Words(Tire Tree)

    Hat's Words Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  3. 字符串处理——字典树

    [概述] 字典树,又称为单词查找树,Tire 树,是一种树形结构,它是哈希树的变种. 字典树与字典很相似,当要查一个单词是不是在字典树中,首先看单词的第一个字母是不是在字典的第一层,如果不在,说明字典 ...

  4. hdu5296 01字典树

    根据二进制建一棵01字典树,每个节点的答案等于左节点0的个数 * 右节点1的个数 * 2,遍历整棵树就能得到答案. AC代码: #include<cstdio> using namespa ...

  5. BZOJ 3483 SGU505 Prefixes and suffixes(字典树+可持久化线段树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3483 [题目大意] 给出一些串,同时给出m对前缀后缀,询问有多少串满足给出的前缀后缀模 ...

  6. 2014百度之星 Xor Sum(字典树+贪心)

    题目在HDU_OJ Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometh ...

  7. HDU6964 I love counting (字典树+莫队)

    题意: 给定一个长度为 nnn 的序列c,qc,qc,q 次询问,每次给出l,r,a,bl,r,a,bl,r,a,b求在[l,r][l,r][l,r]中有多少种不同的值 kkk 满足 k⊕a≤b​.k ...

  8. Beautiful Subarrays (01字典树 瞎搞)

    题意: 题解: 一看问的是子序列,并且还是异或. 首先想到01字典树,再一看让你求子序列的个数,大致是想让你把这个序列进行前缀异或处理后然后再01字典树上进行操作吧. 假设01字典树往左边是0右边是1 ...

  9. CF888G Xor-MST (01字典树+MST)

    题意: 给你n个数,每个数有一个值. 问你这n个数的最小生成树为多少,两点之间的边权为异或值. 题解: 参考了洛谷上的一个题解,总觉得这样的时间复杂度会爆炸,但是确确实实没爆炸. 我们每次去合并两个点 ...

最新文章

  1. 卧槽!成就了Java,开发框架排第一,你还是不够了解它!
  2. Windows10编译源码安装Aleth(Ethereum C++ client, tools and libraries)
  3. mysql定时备份并上传ftp_Linux下定时任务实现mysql自动备份并上传远程ftp
  4. 单行Bash无限while循环的语法
  5. 简释iptables防火墙
  6. java.lang.OutOfMemoryError及解决方案
  7. 39页作业(还款年限—月还款额表)
  8. jaVa游戏三国志英杰传,《三国志英杰传》到底是怎样的一款游戏
  9. 基于box2dWeb开发的切水果游戏总结
  10. mpython 直接访问_python -mSimpleHTTPServer 开启一个简单的http服务器,可传输文件
  11. android触摸屏idc,android4.0触摸屏滑鼠模式解决方法-添加idc文件
  12. 120. strtotime()
  13. c++ 如何获取移动硬盘_M.2 NVMe固态移动硬盘如此DIY,零难度+低成本+速度快
  14. 将string转换为char*
  15. 汽车称重软件系统配置(一)
  16. 电路设计_示波器接地常识
  17. 卡巴6kis最新激活码
  18. 数学建模MATLAB难不难,如何才能在数学建模竞赛中取得好成绩
  19. C语言基础入门:C-Free5新建C语言工程
  20. PHP 下载文件的方法(指定路径)

热门文章

  1. 软件工程师的技能知识图谱0.1(偏后台方向)
  2. [leetcode]5341. 最后 K 个数的乘积
  3. ALOHA simulaiton仿真结果及分析
  4. 试题2 入门训练 圆的面积
  5. 如何使用 python glob model
  6. matlab矩阵运算相关函数
  7. 安卓网络连接全解:包括网络连接状态的监听、网络数据使用状态的监听、获取当前网络连接情况、启动wifi、获取当前连接wifi的网络情况、扫描wifi热点
  8. matlab2c使用c++实现matlab函数系列教程-intersect函数
  9. c#连接mysql数据库,增删查改命令执行
  10. quartus仿真30:D触发器构成的可重复序列111探测器