http://acm.hdu.edu.cn/showproblem.php?pid=1247

题意:

给出一些单词,问哪些单词可以正好由其他的两个单词首尾相连而成。

思路:

先将所有单独插入字典树,然后对于每一个单词,枚举它的分割点,去字典树中查找是否具有这两个单词。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. const int maxn = +;
  6.  
  7. char s[maxn][];
  8. int num = ;
  9.  
  10. struct Trie
  11. {
  12. int son[];
  13. int ends;
  14. }t[maxn*];
  15.  
  16. void init(int x)
  17. {
  18. t[x].ends = ;
  19. memset(t[x].son,,sizeof(t[x].son));
  20. }
  21.  
  22. void insert(char* s)
  23. {
  24. int u = , n = strlen(s);
  25. for(int i=;i<n;i++)
  26. {
  27. int c = s[i]-'a';
  28. if(!t[u].son[c])
  29. {
  30. num++;
  31. init(num);
  32. t[u].son[c] = num;
  33. }
  34. u = t[u].son[c];
  35. }
  36. t[u].ends = ;
  37. }
  38.  
  39. bool query(char* s)
  40. {
  41. int u = , n = strlen(s);
  42. for(int i=;i<n;i++)
  43. {
  44. int c = s[i]-'a';
  45. if(!t[u].son[c]) return false;
  46. u = t[u].son[c];
  47. }
  48. if(t[u].ends == ) return true;
  49. return false;
  50. }
  51.  
  52. int main()
  53. {
  54. //freopen("in.txt","r",stdin);
  55. int tot = ;
  56. char s1[],s2[];
  57. while(~scanf("%s",s[tot++])) insert(s[tot-]);
  58. for(int i=;i<tot;i++)
  59. {
  60. int len = strlen(s[i]);
  61. for(int j=;j<len;j++)
  62. {
  63. memset(s1,,sizeof(s1));
  64. memset(s2,,sizeof(s2));
  65. strncpy(s1,s[i],j);
  66. strncpy(s2,s[i]+j,len-j);
  67. if(query(s1) && query(s2)) {printf("%s\n",s[i]);break;}
  68. }
  69. }
  70. return ;
  71. }

HDU 1247 Hat’s Words(字典树)的更多相关文章

  1. HDU 1247 - Hat’s Words - [字典树水题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1247 Problem DescriptionA hat’s word is a word in the ...

  2. hdu 1247 Hat’s Words(字典树)

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

  3. hdoj 1247 Hat’s Words(字典树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1247 思路分析:题目要求找出在输入字符串中的满足要求(该字符串由输入的字符串中的两个字符串拼接而成)的 ...

  4. Hdu 1247 Hat's Words(Trie树)

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

  5. HDU 1247 Hat’s Words(字典树变形)

    题目链接:pid=1247" target="_blank">http://acm.hdu.edu.cn/showproblem.php? pid=1247 Pro ...

  6. hdu 1247:Hat’s Words(字典树,经典题)

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

  7. HDU 1247 Hat’s Words(字典树)题解

    题意:给一个字符串集,要你给出n个字符串s,使s能被所给字符串集中的两个相加所得(ahat=a+hat) 思路:简单字典树题,注意查询的时候要判断所指next是否为NULL,否则会RE非法访问. 代价 ...

  8. HDU 1247 Hat’s Words (字典树 &amp;&amp; map)

    分析:一開始是用递归做的,没做出来.于是就换了如今的数组.即,把每个输入的字符串都存入二维数组中,然后创建字典树.输入和创建完成后,開始查找. 事实上一開始就读错题目了,题目要求字符串是由其它两个输入 ...

  9. hdu 1251:统计难题(字典树,经典题)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

随机推荐

  1. GUI编程实例

    function varargout = GUI013(varargin) % GUI013 MATLAB code for GUI013.fig % GUI013, by itself, creat ...

  2. hdu 1466 计算直线的交点数 递推

    题目描述 平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数. 比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行). 输入 输入数据包含多个测试实例,每个测试实例占一行,每行包 ...

  3. linux OS与SQL修改时区,系统时间

    linux修改系统时间和linux查看时区.修改时区的方法 一.查看和修改Linux的时区 1. 查看当前时区命令 : "date -R" 2. 修改设置Linux服务器时区方法 ...

  4. 模拟ATM的功能

    import java.io.FileReader; import java.io.FileWriter; import java.io.PrintWriter; import java.util.A ...

  5. Python学习路线人工智能线性代数知识点汇总

    人工智能和数据分析相关的线性代数知识.比如什么是矢量,什么是矩阵,矩阵的加减乘除.矩阵对角化,三角化,秩,QR法,最小二法.等等 矢量: 高中数学中都学过复数,负数表达式是: a+bi 复数实际上和二 ...

  6. error C2504: “XXXXXXX”: 未定义基类

    今天犯到了一个低级错误,记下来加深印象. 造成这一现象主要的原因是头文件相互包含,文件构成一个环形结构,从而编译时循环包含出错 如: AA.h中包含BB.h BB.h中包含CC.h CC.h中包含AA ...

  7. pycharm快捷键及常用设置

    Alt+Enter 自动添加包 shift+O 自动建议代码补全 Ctrl+t SVN更新 Ctrl+k SVN提交 Ctrl + / 注释(取消注释)选择的行 Ctrl+Shift+F 高级查找 C ...

  8. ads查询结果中文显示方框问题

    刚安装aqua data studio查询结果中文会变成小方框 选择File -->Options 找到General  -->Appearance,把Editor Font , Text ...

  9. MySql与MariaDB由来与历程

    MySQL数据库 MySQL数据库是一个关系型数据库管理系统,由瑞典MySQL AB公司开发.MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这 ...

  10. 再论sklearn分类器

    https://www.cnblogs.com/hhh5460/p/5132203.html 这几天在看 sklearn 的文档,发现他的分类器有很多,这里做一些简略的记录. 大致可以将这些分类器分成 ...