[noi1755]Trie

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 100005
4 int V,n,m,l,las[31],d[N],vis[N],nex[N],a[N*5];
5 char s[N*5];
6 queue<int>q;
7 map<int,int>ch[N];
8 map<int,int>::iterator it;
9 void hash(){
10 memset(las,-1,sizeof(las));
11 for(int i=0;i<l;i++){
12 a[i]=i-las[s[i]-'A'];
13 las[s[i]-'A']=i;
14 }
15 }
16 void add(){
17 int k=0;
18 for(int i=0;i<l;i++){
19 if (!ch[k][a[i]])ch[k][a[i]]=++V;
20 k=ch[k][a[i]];
21 d[k]=i+1;
22 }
23 vis[k]=1;
24 }
25 bool query(){
26 int k=0;
27 for(int i=0;i<l;i++){
28 while ((k)&&(!ch[k][min(a[i],d[k]+1)]))k=nex[k];
29 if (ch[k][min(a[i],d[k]+1)])k=ch[k][min(a[i],d[k]+1)];
30 if (vis[k])return 1;
31 }
32 return 0;
33 }
34 void bfs(){
35 q.push(0);
36 while (!q.empty()){
37 int k=q.front();
38 q.pop();
39 vis[k]|=vis[nex[k]];
40 for(it=ch[k].begin();it!=ch[k].end();it++){
41 int i=nex[k];
42 while ((i)&&(!ch[i][min((*it).first,d[i]+1)]))i=nex[i];
43 q.push((*it).second);
44 if (k)nex[(*it).second]=ch[i][min((*it).first,d[i]+1)];
45 }
46 }
47 }
48 int main(){
49 scanf("%d",&n);
50 for(int i=1;i<=n;i++){
51 scanf("%s",s);
52 l=strlen(s);
53 hash();
54 add();
55 }
56 bfs();
57 scanf("%d",&m);
58 for(int i=1;i<=m;i++){
59 scanf("%s",s);
60 l=strlen(s);
61 hash();
62 if (query())printf("Yes\n");
63 else printf("No\n");
64 }
65 }
[noi1755]Trie的更多相关文章
- 基于trie树做一个ac自动机
基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...
- 基于trie树的具有联想功能的文本编辑器
之前的软件设计与开发实践课程中,自己构思的大作业题目.做的具有核心功能,但是还欠缺边边角角的小功能和持久化数据结构,先放出来,有机会一点点改.github:https://github.com/chu ...
- [LeetCode] Implement Trie (Prefix Tree) 实现字典树(前缀树)
Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...
- hihocoder-1014 Trie树
hihocoder 1014 : Trie树 link: https://hihocoder.com/problemset/problem/1014 题意: 实现Trie树,实现对单词的快速统计. # ...
- 【BZOJ-2938】病毒 Trie图 + 拓扑排序
2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 609 Solved: 318[Submit][Status][Di ...
- Poj The xor-longest Path 经典题 Trie求n个数中任意两个异或最大值
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5646 Accepted: 1226 Description In an ...
- 二分+DP+Trie HDOJ 5715 XOR 游戏
题目链接 XOR 游戏 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- 【hihoCoder】1036 Trie图
题目:http://hihocoder.com/problemset/problem/1036 给一个词典dict,词典中包含了一些单词words.要求判断给定的一个文本串text中是否包含这个字典中 ...
- 萌新笔记——C++里创建 Trie字典树(中文词典)(一)(插入、遍历)
萌新做词典第一篇,做得不好,还请指正,谢谢大佬! 写了一个词典,用到了Trie字典树. 写这个词典的目的,一个是为了压缩一些数据,另一个是为了尝试搜索提示,就像在谷歌搜索的时候,打出某个关键字,会提示 ...
随机推荐
- Jave Hbase AP
Hbase API 类和数据模型的对应关系 HBaseAdmin 类:org.apache.hadoop.hbase.client.HBaseAdmin 作用:提供了一个接口来管理 HBase 数据库 ...
- Apache ShardingSphere 邀您相约 Open Source Day
Apache ShardingSphere 很荣幸接受 AnitaB.org 的邀请参加 OpenSourceDay Summer 2021 活动. Open Source Day (OSD) 是一个 ...
- 题解 「BZOJ2137」submultiple
题目传送门 题目大意 给出 \(M,k\) ,求出 \[\sum_{x|M}\sigma(x)^k \] 给出 \(P_i\),满足 \(n=\prod_{i=1}^{n}a_i^{P_i}\),其中 ...
- 洛谷1501 Tree II(LCT,路径修改,路经询问)
这个题是一个经典的维护路径信息的题,对于路径上的修改,我们只需要把对应的链\(split\)上来,然后修改最上面的点就好,注意pushdown的时候的顺序是先乘后加 然后下传乘法标记的时候,记得把对应 ...
- luogu1081 开车旅行2012 D1T3 (倍增,set,O2)
题目描述 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为Hi,城市 i ...
- redis两种持久化策略/存储模式
redis的持久化策略 RDB,即 Redis DataBase,以快照形式将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的dump文件,达到数据恢复. 默认开启,见redis ...
- kafka初认识(一)
首先贴出官网地址:https://kafka.apache.org/ 一. 简介 Kafka 是 linkedin 使用 Scala 编写具有高水平扩展和高吞吐量的分布式消息系统.Kafka 对消息保 ...
- Visual Studio 重置窗口布局
Visual Studio 重置窗口布局
- 一文看懂JVM内存区域分布与作用
那么我们在开始介绍Java内存区域之前,我们先放一张内存区域的图,方便我们后面介绍的时候可以对照着看. 须知,本文是根据JDK8来介绍的. 程序计数器 首先它是线程私有的,它也称为代码的行号指示器,字 ...
- Noip模拟31 2021.8.5
T1 Game 当时先胡了一发$\textit{Next Permutation}$... 然后想正解,只想到贪心能求最大得分,然后就不会了.. 然后就甩个二十分的走了... 正解的最大得分(叫它$k ...