题目

字典树,注意初始化的位置~!!位置放错,永远也到不了终点了org。。。。

我是用数组模拟的字典树,这就要注意内存开多少了,,要开的不大不小刚刚好真的不容易啊。。。。

我用了val来标记是否是同一个串分解而来的,保存的是串的编号

num记录数目。

  1. //string &replace(iterator first0, iterator last0,const_iterator first, const_iterator last);
  2. //把[first0,last0)之间的部分替换成[first,last)之间的字符串
  3.  
  4. #include<iostream>
  5. #include<cstdio>
  6. #include<list>
  7. #include<algorithm>
  8. #include<cstring>
  9. #include<string>
  10. #include<queue>
  11. #include<stack>
  12. #include<map>
  13. #include<vector>
  14. #include<cmath>
  15. #include<memory.h>
  16. #include<set>
  17. using namespace std;
  18. #define ll __int64
  19. int pos;
  20. struct tt
  21. {
  22. int val,arr[],num;
  23. tt(){
  24. val=-,num=;
  25. memset(arr,-,sizeof(arr));
  26. }
  27. }a[]; //用数组模拟的字典树开的内存大小也是一个技术活,太大超内存,太小runtime errer。。
  28.  
  29. void insert(char *s,int val,int id,int d)
  30. {
  31. if(s[d]=='\0')return;
  32.  
  33. int t=s[d]-'a';
  34. if(a[id].arr[t]==-)
  35. a[id].arr[t]=++pos;
  36. id=a[id].arr[t];
  37. if(a[id].val!=val)
  38. {
  39. a[id].val=val;
  40. a[id].num++;
  41. }
  42. insert(s,val,id,d+);
  43. }
  44. int solve(char *s,int id)
  45. {
  46. int ans=;
  47. int len=strlen(s);
  48. for(int i=;i<len;i++)
  49. {
  50. int t=s[i]-'a';
  51. if(a[id].arr[t]==-)
  52. return ;
  53. else
  54. id=a[id].arr[t];
  55. }
  56. return a[id].num;
  57. }
  58.  
  59. int main()
  60. {
  61. int t;
  62. pos=;//注意初始化的位置
  63. scanf("%d",&t);
  64. while(t--)
  65. {
  66. char s[];
  67. scanf("%s",s);
  68. int len=strlen(s);
  69. for(int i=;i<len;i++)
  70. {
  71. insert(s+i,t,,);
  72. }
  73. }
  74. int n;
  75. scanf("%d",&n);
  76. while(n--)
  77. {
  78. char s[];
  79. scanf("%s",s);
  80. int ans=solve(s,);
  81. printf("%d\n",ans);
  82. }
  83. return ;
  84. }

HDU 2846 Repository(字典树,标记)的更多相关文章

  1. HDU 2846 Repository (字典树 后缀建树)

    Repository Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  2. hdu 2846 Repository (字典树)

    RepositoryTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  3. hdu 2846(字典树)

    Repository Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  4. HDU 2846 Repository(字典树,每个子串建树,*s的使用)

    Repository Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  5. HDU 2846 Repository(字典树)

    字典树较为复杂的应用,我们在建立字典树的过程中需要把所有的前缀都加进去,还需要加一个id,判断它原先是属于哪个串的.有人说是AC自动机的简化,但是AC自动机我还没有做过. #include<io ...

  6. hdu 2846 Repository

    http://acm.hdu.edu.cn/showproblem.php?pid=2846 Repository Time Limit: 2000/1000 MS (Java/Others)     ...

  7. hdu 1979 DFS + 字典树剪枝

    http://acm.hdu.edu.cn/showproblem.php?pid=1979 Fill the blanks Time Limit: 3000/1000 MS (Java/Others ...

  8. HDU 1671 (字典树统计是否有前缀)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1671 Problem Description Given a list of phone number ...

  9. hdu2846 Repository 字典树(好题)

    把每个字符串的所有子串都加入字典树,但在加入时应该注意同一个字符串的相同子串只加一次,因此可以给字典树的每个节点做个记号flag--表示最后这个前缀是属于那个字符串,如果当前加入的串与它相同,且二者属 ...

随机推荐

  1. 在WPF中调用Winform控件

    最近在项目中用到了人脸识别和指纹识别,需要调用外部设备和接口,这里就用到了在WPF中调用Winform控件. 第一步,添加程序集引用.System.Windows.Forms和WindowsForms ...

  2. 【转】Hibernate入门实例

    1. 环境配置 1.1 hiberante环境配置 hibernate可实现面向对象的数据存储.hibernate的官网:http://hibernate.org/ 官网上选择hibernate OR ...

  3. spring 基本操作总结主要是aop以及依赖注入的基本配置

    一所需架包 spring commom-logging.jar  spring.jar 注解 common-annotation.jar aop面向切面 aspectjrt.jar    aspect ...

  4. ZygoteInit 相关分析

    上一篇文章我们已经分析到调用com.android.internal.os.ZygoteInit类的main函数. 今天分析一下com.android.internal.os.ZygoteInit类的 ...

  5. dede 忘记密码在数据库中修改方法

    如何找回或修改dedecms后台管理员登录密码呢? 一个客户把密码忘了,找了很长一会没几个靠谱的回答,dede是使用md5加密,但是,它是显示32位md5加密码从第6位开始的20位 方法是直接修改其m ...

  6. qu

    离骚 (3481人评分) 8.5   朝代:先秦 作者:屈原 原文: 帝高阳之苗裔兮,朕皇考曰伯庸.摄提贞于孟陬兮,惟庚寅吾以降.皇览揆余初度兮,肇锡余以嘉名:名余曰正则兮,字余曰灵均.纷吾既有此内美 ...

  7. MVC4.0 利用IActionFilter实现单一Action返回多种结果

    延续MVC4.0 实现单一Action返回多种结果,我们实现了在一个Action中根据前台请求方式的不同和请求内容的不同返回了多个结果,但是这种返回多个结果的业务逻辑并不通用.如果现在年纪Action ...

  8. 条款9:不要在构造和析构过程中调用virtual函数

    如下是一个股票交易的例子: class Transaction // 交易的基类 { public: Transaction(); ; // 用于记录交易日志 }; Transaction::Tran ...

  9. UIToolbar swift

    // // ViewController.swift // UILabelTest // // Created by mac on 15/6/23. // Copyright (c) 2015年 fa ...

  10. VS2013中常用的一些快捷键

    1.编辑时需要前后文切换: 需要自己设置为:ctrl+alt +方向键,向前查看,设置为右方向键,向后查看,设置为左方向键 依次选择:工具->选项->环境->键盘-> 2.查看 ...