传送门

题意:给定一个模式串和nnn个匹配串,询问原串有多少个子串和匹配串循环同构


考虑要求循环同构,于是先对SSS建出后缀自动机
把每次询问的XXX倍长在自动机上跑

如果当前匹配的长度已经超过原串长时跳failfailfail到原串应该的位置上
注意自动机上每个点的贡献只记一次

#include<bits/stdc++.h>
using namespace std;
const int RLEN=1<<21|1;
inline char gc(){static char ibuf[RLEN],*ib,*ob;(ib==ob)&&(ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));return (ib==ob)?EOF:*ib++;
}
#define gc getchar
inline int read(){char ch=gc();int res=0,f=1;while(!isdigit(ch))f^=ch=='-',ch=gc();while(isdigit(ch))res=(res+(res<<2)<<1)+(ch^48),ch=gc();return f?res:-res;
}
#define ll long long
#define pii pair<int,int>
#define fi first
#define se second
#define pb push_back
#define pob pop_back
#define pf push_front
#define pof pop_front
#define mp make_pair
#define bg begin
#define re register
const int N=2000005;
int nxt[N][26],fa[N],siz[N],len[N],A[N],rk[N],vis[N];
int last,tot;
inline void insert(int c){int cur=++tot,p=last;last=cur,len[cur]=len[p]+1,siz[cur]=1;for(;p&&!nxt[p][c];p=fa[p])nxt[p][c]=cur;if(!p)fa[cur]=1;else{int q=nxt[p][c];if(len[p]+1==len[q])fa[cur]=q;else{int clo=++tot;memcpy(nxt[clo],nxt[q],sizeof(nxt[q]));fa[clo]=fa[q],fa[q]=fa[cur]=clo;len[clo]=len[p]+1;for(;p&&nxt[p][c]==q;p=fa[p])nxt[p][c]=clo;}}
}
inline void build(){for(int i=1;i<=tot;i++)A[len[i]]++;for(int i=1;i<=tot;i++)A[i]+=A[i-1];for(int i=tot;i;i--)rk[A[len[i]]--]=i;for(int i=tot;i;i--)siz[fa[rk[i]]]+=siz[rk[i]];
}
inline int calc(char *s,int n,int t){int p=1,l=0,res=0;for(int i=1;i<=n*2-1;i++){int c=s[i]-'a';while(p!=1&&!nxt[p][c])p=fa[p],l=len[p];if(nxt[p][c])p=nxt[p][c],l++;while(len[fa[p]]>=n)p=fa[p],l=len[p];if(l>=n&&vis[p]!=t)vis[p]=t,res+=siz[p];}return res;
}
int n,q;
char s[N];
int main(){scanf("%s",s+1);n=strlen(s+1);last=tot=1;for(int i=1;i<=n;i++)insert(s[i]-'a');build();n=read();for(int i=1;i<=n;i++){scanf("%s",s+1);int len=strlen(s+1);for(int i=1;i<len;i++)s[i+len]=s[i];cout<<calc(s,len,i)<<'\n';}
}

转载于:https://www.cnblogs.com/stargazer-cyk/p/11145527.html

Codeforces #235 C.Cyclical Quest(后缀自动机)相关推荐

  1. Codeforces 235C Cyclical Quest (后缀自动机)

    题目链接: https://codeforces.com/contest/235/problem/C 题解: 对大串建后缀自动机 对询问串复制拆环.这里一定要注意是复制一个循环节不是复制整个串!循环节 ...

  2. Codeforces.666E.Forensic Examination(广义后缀自动机 线段树合并)

    题目链接 \(Description\) 给定串\(S\)和\(m\)个串\(T_i\).\(Q\)次询问,每次询问\(l,r,p_l,p_r\),求\(S[p_l\sim p_r]\)在\(T_l\ ...

  3. CodeForces 235C Cyclical Quest (后缀自动机)

    题意:给一个主串,再给出多个模式串,分别求主串中有多少个连续子串,与模式串循环同构. 题解:后缀自动机 因为要求循环同构,所以将模式串复制放到后面.(要么加终止符,要么传入长度) 先对主串建sam,然 ...

  4. 后缀自动机(探索)Codeforces 427D

    想学后缀自动机的 弱鸡 表示真自闭啊 开局一道题,内容全靠水 :Codeforces 427D 有题目才能更好地学 算法 题意很简单 :给两个字符串,求最短公共子串 的长度 后缀自动机 模板很多 ,给 ...

  5. CodeForces - 427D Match Catch(后缀数组/广义后缀自动机)

    题目链接:点击查看 题目大意:给出两个字符串,求出两个字符串中的最短公共子串,且在每个字符串中只出现过一次 题目分析:因为这个公共子串只能在字符串中出现一次,考虑到用后缀数组,我们先将两个字符串通过特 ...

  6. Codeforces Round #364 (Div. 1) (差一个后缀自动机)

    B. Connecting Universities 大意: 给定树, 给定2*k个点, 求将2*k个点两两匹配, 每个匹配的贡献为两点的距离, 求贡献最大值 单独考虑每条边$(u,v)$的贡献即可, ...

  7. CF 316G3 Good Substrings——广义后缀自动机

    题目:http://codeforces.com/contest/316/problem/G3 对询问串和模式串一起建一个后缀自动机,做出在每个串上的 right 集合大小之后枚举自动机上的每个点看看 ...

  8. 【POJ1509】Glass Beads 【后缀自动机】

    题意 给出一个字符串,求它的最小表示法. 分析 这个题当然可以用最小表示法做啦!但是我是为了学后缀自动机鸭! 我们把这个字符串长度乘二,然后建SAM,然后在SAM上每次跑最小的那个字母,找出长度为n的 ...

  9. bzoj 2946 [Poi2000]公共串——后缀自动机

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2946 对每个串都建一个后缀自动机,然后 dfs 其中一个自动机,记录同步的话在别的自动机上走 ...

最新文章

  1. c语言延时函数_介召几个frida在安卓逆向中使用的脚本以及延时Hook手法
  2. 为什么面试官总喜欢问String?
  3. 五大HR所不认同的跳槽理由(转)
  4. PaperWeekly社区 | 知识图谱 vs. 对话系统专题讨论
  5. Apache POI操作Excel导出JAVABEAN对象方法
  6. js判断字符串包含某个字符_python str 字符串的逻辑判断用法
  7. 垃圾收集:提高吞吐量
  8. cocos2d 解密ccbi_怎么让cocosbuilder制作的动画(cocos2d-x的ccbi动画)播放完删除自己?...
  9. Asp.net AJAX JavaScript 基本类型扩展(7)——String 类型及其扩展
  10. stm32核心板可以点亮灯吗_利用STM32F103C8T6最小系统板点亮流水灯
  11. Spark环境搭建(保姆级教程)
  12. zktime 协议_Zktime考勤管理系统
  13. linux安装vim不成功,centos安装vim失败解决
  14. 电脑自动同步服务器时间bat,关于电脑时间自动同步校准方法
  15. Linux内核regulator架构和编写
  16. echarts世界地图
  17. MinGW-W64下载、配置教程
  18. 材料专业转行适合做什么
  19. 学习(Java Web)编程技术要点及方向; 完成项目的要决
  20. linux命令行编译pascal,【教程】 如何在linux/mac下安装pascal

热门文章

  1. 菜鸟慢慢爬行-----web(9)
  2. Visio画神经网络卷积层
  3. 手机的超声波通信---对于特殊声音信号的相关资料
  4. 报错 kernel:NMI watchdog: BUG: soft lockup - CPU#1 stuck for 22s! [insmod:55902]处理
  5. 分享60个ASP整站程序源码,总有一款适合您
  6. 通过示例学习rholang(上部:课程0-6)
  7. 正规网站莫名其妙被QQ微信拦截?怎么解除?
  8. yield java_yield在java中的使用
  9. 计算机组成原理 微机原理 知乎,知乎问答丨从零制作单片机需要哪些知识?
  10. Github在双重验证的时候Country- code 没有中国区的解决办法