定义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 }

最新文章

  1. Struts2环境下Tomcat启动异常:Exception starting filter struts2,报了一个java.lang.ClassNotFoundException
  2. Reflector、reflexil、De4Dot、IL指令速查表
  3. selenium项目的实战经验
  4. Spring事务传播属性
  5. Android Retrofit实现原理分析
  6. WP开发笔记——WP APP添加页面跳转动画
  7. poj 3249 拓扑排序 and 动态规划
  8. ACM YTU 1012 u Calculate e
  9. 如何使用picasso 对Android图片下载缓存
  10. sql之T-SQL
  11. Android源码编译jar包BUILD_JAVA_LIBRARY 与BUILD_STATIC_JAVA_LIBRARY的区别(二)
  12. Http协议规范及格式
  13. tyflow birth节点
  14. spring的配置和使用
  15. netcore log4相关
  16. Oracle控制文件冗余
  17. TestNg 7.依赖测试
  18. CDN拾遗
  19. LNMP 1.x升级到LNMP 1.4教程及注意事项和多PHP版本使用教程
  20. stl中顺序性容器,关联容器两者粗略解释

热门文章

  1. 从零入门 Serverless | SAE 场景下,应用流量的负载均衡及路由策略配置实践
  2. codeforces316E3 Summer Homework(线段树,斐波那契数列)
  3. 从0到1使用Kubernetes系列(三):使用Ansible安装Kubernetes集群
  4. python T1119紧急措施
  5. Hive SQL的底层编译过程详解
  6. SpringBoot打包到docker(idea+传统方式)
  7. ThreadLocal部分源码分析
  8. js判断移动端浏览器类型,微信浏览器、支付宝小程序、微信小程序等
  9. Linux C语言链表你学会了吗?
  10. STM32程序异常——中断处理要谨慎