[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字典树. 写这个词典的目的,一个是为了压缩一些数据,另一个是为了尝试搜索提示,就像在谷歌搜索的时候,打出某个关键字,会提示 ...
随机推荐
- sarama的消费者组分析、使用
以前老的sarama版本不支持消费者组的消费方式,所以大多数人都用sarama-cluster. 后来sarama支持了消费者组的消费方式,sarama-cluster也停止维护了,但网上关于sara ...
- Kotlin/Native KMM项目架构
一.什么是KMM? Kotlin Multiplatform Mobile ( KMM ) 是一个 SDK,旨在简化跨平台移动应用程序的创建.在 KMM 的帮助下,您可以在 iOS 和 Android ...
- Frida高级逆向-Hook Native(Java So)
Frida Hook Native Frida Hook Java Jni demo: function hook_java() { Java.perform(function () { const ...
- 兜底机制——leader到底做了什么?
Case 在之前一次年底考评的时候,有一位leader将一个案例同时用到了自己和下属身上,老板发出了责问: 这个项目到底你是负责人,还是你下面的同学是负责人,如果下面的同学是负责人,为什么要算到你的头 ...
- python打印爱心
print('\n'.join([''.join([('AndyLove'[(x-y)%8]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 ...
- 面试题系列:new String("abc")创建了几个对象
new String("abc")创建了几个对象 面试官考察点猜想 这种问题,考察你对JVM的理解程度.涉及到常量池.对象内存分配等问题. 涉及背景知识详解 在分析这个问题之前,我 ...
- Beta Scrum Meeting汇总
第0次Alpha Scrum Meeting 第1次Alpha Scrum Meeting 第2次Alpha Scrum Meeting 第3次Alpha Scrum Meeting 第4次Alpha ...
- 第七次Scrum Metting
日期:2021年5月5日 会议主要内容概述:前后端对接,以及接下来的测试优化等工作. 一.进度情况 组员 负责 两日内已完成的工作 后两日计划完成的工作 工作中遇到的困难 徐宇龙 后端 测试数据模块和 ...
- 2021.10.9考试总结[NOIP模拟72]
T1出了个大阴间题 状压\(DP\),记当前状态的代价和与方案数.状态\(\Theta(2^nn)\),转移\(\Theta(n)\). 发现每个状态的最大值只会是所选集合的\(max\)或加一.于是 ...
- Python课程笔记(六)
今天上课补上了上次未学完比较重点的鼠标和键盘事件,同时开始学习运用turtle进行绘图. 本次课程的代码: https://gitee.com/wang_ming_er/python_course_l ...