定义S对应的数组为$a_{i}=\min_{0\le j<i,S_{j}=S_{i}}i-j$,特别的,若不存在j,令$a_{i}=i$,那么容易发现存在双射关系就意味这两者对应的数组相同
因此,考虑需要单词为$a_{i}$,询问串对应的为$b_{i}$,那么如果$b[i,i+l_{a})$与$a$存在双射,当且仅当对于任意j,都有$a_{j}=b_{i+j}\vee (a_{j}=j\wedge b_{i+j}>j)$
具体的,使用AC自动机来判断,由于$b_{i+j}>j$的判断,因此要存储当前节点的深度

 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的更多相关文章

  1. 基于trie树做一个ac自动机

    基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...

  2. 基于trie树的具有联想功能的文本编辑器

    之前的软件设计与开发实践课程中,自己构思的大作业题目.做的具有核心功能,但是还欠缺边边角角的小功能和持久化数据结构,先放出来,有机会一点点改.github:https://github.com/chu ...

  3. [LeetCode] Implement Trie (Prefix Tree) 实现字典树(前缀树)

    Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...

  4. hihocoder-1014 Trie树

    hihocoder 1014 : Trie树 link: https://hihocoder.com/problemset/problem/1014 题意: 实现Trie树,实现对单词的快速统计. # ...

  5. 【BZOJ-2938】病毒 Trie图 + 拓扑排序

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 609  Solved: 318[Submit][Status][Di ...

  6. Poj The xor-longest Path 经典题 Trie求n个数中任意两个异或最大值

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5646   Accepted: 1226 Description In an ...

  7. 二分+DP+Trie HDOJ 5715 XOR 游戏

    题目链接 XOR 游戏 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  8. 【hihoCoder】1036 Trie图

    题目:http://hihocoder.com/problemset/problem/1036 给一个词典dict,词典中包含了一些单词words.要求判断给定的一个文本串text中是否包含这个字典中 ...

  9. 萌新笔记——C++里创建 Trie字典树(中文词典)(一)(插入、遍历)

    萌新做词典第一篇,做得不好,还请指正,谢谢大佬! 写了一个词典,用到了Trie字典树. 写这个词典的目的,一个是为了压缩一些数据,另一个是为了尝试搜索提示,就像在谷歌搜索的时候,打出某个关键字,会提示 ...

随机推荐

  1. MyBatis 中实现SQL语句中in的操作 (11)

    MyBatis 中实现SQL语句中in的操作 概括:应用myBatis实现SQL查询中IN的操作 1.数据库结构及其数据 2.mapper.xml文件 <?xml version="1 ...

  2. FastAPI 学习之路(二十七)安全校验

    你写API接口肯定你是希望是有权限的人才能访问,没有权限的人是不能访问的,那么我们应该如何去处理呢,我们可以用的验证方式有很多,我们这次分享的是用:OAuth2来认证.那么我们看下,需要怎么才能实现呢 ...

  3. 一文彻底搞通TCP之send & recv原理

    接触过网络开发的人,大抵都知道,上层应用使用send函数发送数据,使用recv来接收数据,而send和recv的实现原理又是怎样的呢? 在前面的几篇文章中,我们有提过,TCP是个可靠的.全双工协议.其 ...

  4. jq问题

    <div id="box"> <p> <span>A</span> <span>B</span> </ ...

  5. Vue3学习(八)之 Vue CLI多环境配置

    一.前言 这里相对于之前就没那么麻烦了,通俗点说就是使用配置文件来管理多环境,实现环境的切换. 二.实现切换 1.增加开发和生产配置文件 在web的根目录下,创建开发环境切换配置文件.env.dev, ...

  6. MySQL:基础语法-1

    MySQL:基础语法-1 记录一下 MySQL 基础的一些语法,便于查询,该部分内容主要是参考:bilibili 上 黑马程序员 的课程而做的笔记,由于时间有点久了,课程地址忘记了 关于数据库的安装操 ...

  7. [Beta]the Agiles Scrum Meeting 5

    会议时间:2020.5.19 20:00 1.每个人的工作 今天已完成的工作 成员 已完成的工作 issue yjy 为评测机增加更多评测指标 评测部分增加更多评测指标 tq 为评测机增加更多评测指标 ...

  8. Spark面试题整理(三)

    1.为什么要进行序列化序列化? 可以减少数据的体积,减少存储空间,高效存储和传输数据,不好的是使用的时候要反序列化,非常消耗CPU. 2.Yarn中的container是由谁负责销毁的,在Hadoop ...

  9. Java之父 James Gosling 发表博文 《Too Soon》纪念乔布斯。

    几个礼拜前,我们还在讨论乔布斯的辞职.虽然我们都知道这意味着什么,但是我没有想到一切来的如此之快.已经有很多关于这件事情的文章了,特别是"经济学人"的这篇文章. 乔布斯是一个很独特 ...

  10. Python里字符串Format时的一个易错“点”

    这是一篇很小的笔记,原因是我做学习通的时候见到了这个题: 当时看了一会儿发现没有符合自己想法的答案,然后就脑袋一热选了C,结果当然是错了... 看了一眼这个format的字符串对象,发现有个 {:7. ...