题中没给范围 所以控制不好数组范围。。不是超内存就是runtime。。

好吧 到了晚上终于调出来数组模拟的了

题意:

  求含有某字符段的个数

解析:

  把每个字符串遍历一遍 以每个元素为起点建树就好了。。

  注意add型。。因为每个字符串的元素只记一次  所以用id标记一下是否属于同一个源字符串就好了

嗯。。。。还有。。。用c++交。。。

指针:

#include <iostream>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#define rap(i, a, n) for(int i=a; i<=n; i++)
#define rep(i, a, n) for(int i=a; i<n; i++)
#define lap(i, a, n) for(int i=n; i>=a; i--)
#define lep(i, a, n) for(int i=n; i>a; i--)
#define MOD 2018
#define LL long long
#define ULL unsigned long long
#define Pair pair<int, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define _  ios_base::sync_with_stdio(0),cin->tie(0)
//freopen("1->txt", "r", stdin);
using namespace std;
const int maxn = 26, INF = 0x7fffffff;
char s[21];
struct node
{int num;int id;node *next[maxn];node(){num = id = 0;mem(next, 0);}
}rt;void build(char *a, int id)
{int k = 0;node *p = &rt;while(a[k]){// int x = a[k++] - 'a';if(!p->next[a[k] - 'a']) p->next[a[k] - 'a'] = new node;p = p->next[a[k++] - 'a'];if(p->id != id)p->num++;p->id = id;}
}int qp(char *a)
{int k = 0;node *p = &rt;//  int x = a[k] - 'a';while(a[k] && p->next[a[k] - 'a']) p = p->next[a[k++] - 'a'];if(a[k]) return 0;return p->num;
}int main()
{//  init();int n;scanf("%d", &n);rap(i, 1, n){cin>> s;int len = strlen(s);rep(j, 0, len){build(s+j, i);}}int m;scanf("%d", &m);rap(i, 1, m){cin>> s;printf("%d\n", qp(s));}return 0;
}

数组:

#include <iostream>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#define rap(i, a, n) for(int i=a; i<=n; i++)
#define rep(i, a, n) for(int i=a; i<n; i++)
#define lap(i, a, n) for(int i=n; i>=a; i--)
#define lep(i, a, n) for(int i=n; i>a; i--)
#define MOD 2018
#define LL long long
#define ULL unsigned long long
#define Pair pair<int, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define _  ios_base::sync_with_stdio(0),cin.tie(0)
//freopen("1.txt", "r", stdin);
using namespace std;
const int maxn = 10001, INF = 0x7fffffff;
int trie[maxn*50][26], sum[maxn*50], id[maxn*50];
int rt, tot;
char s[21];
void build(char* ss, int p)
{int len = strlen(ss);rt = 0;for(int i=0; i<len; i++){int x = ss[i] - 'a';if(trie[rt][x] == 0){trie[rt][x] = ++tot;}rt = trie[rt][x];if(id[rt] != p)sum[rt]++;id[rt] = p;}//sum[rt]++;
}int qp()
{int len = strlen(s);rt = 0;for(int i=0; i<len; i++){int x = s[i] - 'a';if(trie[rt][x] == 0) return 0;rt = trie[rt][x];}return sum[rt];
}void init()
{mem(trie, 0);mem(sum, 0);mem(id, 0);tot = 0;
}int main()
{init();int n;scanf("%d", &n);rap(i, 1, n){cin>> s;int len = strlen(s);rep(j, 0, len){build(s+j, i);//       cout<< "                     " << s+j <<endl;
        }}int m;scanf("%d", &m);rap(i, 1, m){cin>> s;printf("%d\n", qp());}return 0;
}

转载于:https://www.cnblogs.com/WTSRUVF/p/9456523.html

Repository HDU - 2846 (trie)相关推荐

  1. hdu 2224(dp)

    hdu 2224 (1)题意: 从1找一条到n的路径(路径上的前一个节点的编号小于后一个节点的编号), 然后找一条从n到1的路径,(路径上的前一个节点的编号大于后一个节点的编号)要求这两条路径遍历所有 ...

  2. hdu 5055(坑)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5055 Bob and math problem Time Limit: 2000/1000 MS (J ...

  3. [算法系列之二十]字典树(Trie)

    一 概述 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计. 二 优点 利用字符串 ...

  4. hdu 5534(dp)

    Input The first line contains an integer T indicating the total number of test cases. Each test case ...

  5. hdu 4196(数论)

    题意:问小于n的数的乘积能拼成的最大平方数是多少? 思路:给n!做质数分解在除去指数为奇数的那些质数,由于题目中需要模运算所以不能直接除,必须乘上摸逆. 代码如下: 1 /************** ...

  6. HDU 4545 (模拟) 魔法串

    题目链接 Problem Description 小明和他的好朋友小西在玩一个新的游戏,由小西给出一个由小写字母构成的字符串,小明给出另一个比小西更长的字符串,也由小写字母组成,如果能通过魔法转换使小 ...

  7. 字典树(Trie)的java实现

    一.定义 字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用 ...

  8. hdu 1408(高精度)坑人嫩

    Problem Description 挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下:然后滴二滴,停一下:再滴三滴,停一下-,现在有一个问题:这瓶盐水一共有VUL毫升,每一滴是D毫升,每一滴的速 ...

  9. Courses hdu 1083(匹配)

    http://acm.hdu.edu.cn/showproblem.php?pid=1083 题意:一共有N个学生跟P门课程,一个学生可以任意选一门或多门课,问是否达成: 1.每个学生选的都是不同的课 ...

最新文章

  1. 《转》Java Process应用之惑
  2. HBase学习笔记2 - HBase shell常用命令
  3. Java命令行界面(第22部分):argparser
  4. Struts2 的Action 命名重复检测
  5. 数据中异常值的鉴定和处理(1)
  6. header+php+xiazai_php通过header方法实现文件下载
  7. 提款机转账多久到账?
  8. 【NOIP2002】【Luogu1032】字串变换
  9. Java多线程进阶(三六)—— J.U.C之collections框架:DelayQueue
  10. win2K/win2003终端服务器超出最大允许连接数解决之道全攻略
  11. Redhat 7 配置Yum仓库
  12. 智慧城管统计考评详解
  13. 2020车载凯立德懒人包下载_【汽车导航升级】2020抖音最新流行音乐包 无损 可CD刻录福利分享...
  14. 以计算机作为类 触摸板作为接口,怎样用Arduinopromicro将电脑触控板转换为USB设备...
  15. 关于Win10系统-svchost大量占用网速及自动更新问题——完美解决
  16. 删除office的产品秘钥
  17. hashlib hamc
  18. linux命令行恢复回收站,Trash-Cli:Linux 上的命令行回收站工具
  19. java 使用JNA连接天敏VC4000采集卡
  20. android与华为窄带物联网,中国移动联合华为在成都布局窄带物联网

热门文章

  1. asp跟JAVA语言有关系吗_asp程序员如何转行为J2EE之java基础上(11)
  2. java滚动条调整数值_急..JAVA 在画布上画拖动滚动条可扩大缩小的长方形
  3. linux编码合适修改_CentOS升级Linux内核备忘录
  4. 局域网摄像头扫描_使用Pyhton带你分析酒店里的针孔摄像头
  5. 扫描仪twain驱动是什么_扫描仪无法显示怎么办 扫描仪无法显示解决方法【详解】...
  6. qq浏览器网页翻译_在线英文翻译、文档翻译,这几款翻译工具你值得拥有
  7. 处理增删改_实现数据的增删改查
  8. html5光标进去默认值消失,html点击input没有出现光标怎么办
  9. java类包装器有什么用_Java中的包装器类
  10. rxjava 观察者模式_RxJava可观察对象和观察者