题目链接:点击查看

题目大意:给出一个模式串,在给出多个匹配串,问每个匹配串与其“循环相似旋律”的字符串,在模式串中出现的总次数,“循环相似旋律”指的是一个字符串不断将首字符放到末尾去所形成的新的字符串,一个字符串最多有 len 个“循环相似旋律”字符串

题目分析:看完题目后很容易想到AC自动机上去,但如果真用AC自动机做的话,时间复杂度将是n*n的,因为每个字符串都有 n 个“循环相似旋律”字符串,所以我们可以考虑将后缀自动机变形一下当做AC自动机来用,具体题解在题目中已经解释的很清楚了,这里就只贴个代码吧

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e5+100;char s[N<<1];int tot=1,last=1,id[N<<1],tong[N<<1],cnt[N<<1],vis[N<<1];struct Node
{int ch[26];int fa,len;
}st[N<<1];void add(int x)
{int p=last,np=last=++tot;st[np].len=st[p].len+1;cnt[np]++;while(p&&!st[p].ch[x])st[p].ch[x]=np,p=st[p].fa;if(!p)st[np].fa=1;else{int q=st[p].ch[x];if(st[p].len+1==st[q].len)st[np].fa=q;else{int nq=++tot;st[nq]=st[q]; st[nq].len=st[p].len+1;st[q].fa=st[np].fa=nq;while(p&&st[p].ch[x]==q)st[p].ch[x]=nq,p=st[p].fa;//向上把所有q都替换成nq}}
}void radix_sort()
{for(int i=1;i<=tot;i++)tong[st[i].len]++;for(int i=1;i<=tot;i++)tong[i]+=tong[i-1];for(int i=1;i<=tot;i++)id[tong[st[i].len]--]=i;
}int main()
{
//#ifndef ONLINE_JUDGE
//  freopen("input.txt","r",stdin);
//#endif
//  ios::sync_with_stdio(false);scanf("%s",s);int n=strlen(s);for(int i=0;i<n;i++)add(s[i]-'a');radix_sort();for(int i=tot;i>=1;i--){int cur=id[i],fa=st[cur].fa;cnt[fa]+=cnt[cur];}int w;cin>>w;while(w--){scanf("%s",s);int len=strlen(s);for(int i=0;i<len-1;i++)s[i+len]=s[i];int u=1,l=0,ans=0;for(int i=0;i<2*len-1;i++){int to=s[i]-'a';while(u!=1&&!st[u].ch[to])//向上找到一个可以向下走的结点 {u=st[u].fa;l=st[u].len;}if(st[u].ch[to])//如果该结点存在,则走一步 {u=st[u].ch[to];l++;}else//否则归零 {u=1;l=0;}while(l>=len&&st[st[u].fa].len+1>len)//这里要求出最靠近n的maxlen(u)>=n   len(fa)+1==minlen(u) {u=st[u].fa;l=st[u].len;}if(l>=len&&vis[u]!=w+1){vis[u]=w+1;ans+=cnt[u];}}printf("%d\n",ans);}return 0;
}

HihoCoder - 1465 后缀自动机五·重复旋律8(后缀自动机)相关推荐

  1. hihocoder 1465 : 后缀自动机五·重复旋律8(后缀自动机+最长公共子串)

    1465 : 后缀自动机五·重复旋律8 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一段音乐旋律可以被表示为一段数构成的 ...

  2. hihocoder #1465 : 后缀自动机五·重复旋律8

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一段音乐旋律可以被表示为一段数构成的数列. 小Hi发现旋律可以循环,每次把一 ...

  3. HihoCoder - 1457 后缀自动机四·重复旋律7(后缀自动机)

    题目链接:点击查看 题目大意:给出 n 个由 0~9 的数字组成的字符串,现在要求每个子串所表示的十进制下数字的累加之和 题目分析:因为对于字符串的所有子串而言数量无疑是非常庞大的,所以我们选择用后缀 ...

  4. HihoCoder - 1445 后缀自动机二·重复旋律5(后缀自动机)

    题目链接:点击查看 题目大意:给出一个字符串 s ,求 s 中本质不同的子串的数量 题目分析:因为 s 的长度给到了 1e6 ,用后缀数组可能会超时,所以最好的方法肯定是用后缀自动机来做,因为每个节点 ...

  5. hihocoder 1457 : 后缀自动机四·重复旋律7(后缀自动机+拓扑序BFS)

    #1457 : 后缀自动机四·重复旋律7 时间限制:15000ms 单点时限:3000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一段音乐旋律可以被表示为一段数构成 ...

  6. hihocoder 1449 : 后缀自动机三·重复旋律6(后缀自动机)

    #1449 : 后缀自动机三·重复旋律6 时间限制:15000ms 单点时限:3000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数 ...

  7. hiho一下第128周 后缀自动机二·重复旋律5

    #1445 : 后缀自动机二·重复旋律5 时间限制:10000ms 单点时限:2000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数 ...

  8. hiho一下120周 后缀数组一·重复旋律

    后缀数组一·重复旋律 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为长度为 N 的数构成的数列. 小Hi ...

  9. hihoCoder #1457 : 后缀自动机四·重复旋律7

    题目链接 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一段音乐旋律可以被表示为一段数构成的数列. 神奇的是小Hi发现了一部名字叫<十进制进行曲大全>的作品集,顾名思义,这部作品集里 ...

最新文章

  1. 算法提高课-图论-欧拉回路和欧拉路径-AcWing 1185. 单词游戏:判断有向图是否存在欧拉路径、并查集
  2. mysql中binlog_format模式与配置详解
  3. 【暴力】I Liked Matrix!
  4. php写linux应用程序,Linux应用程序使用写文件调试程序的方法
  5. BN层和Dropout层
  6. 【雷达通信】基于matlab粒子群算法优化综合微带天线阵列方向图【含Matlab源码 1967期】
  7. 超级全的一篇前端性能优化清单
  8. 《太上感应篇》告诉我们,人的起心动念都得小心啊,哈哈。
  9. word替换向下箭头符号
  10. 记一次zip压缩包打开异常问题
  11. Frank计算机基础硬件笔记
  12. 使用maven为web工程引入jstl包时报错
  13. 【软件定义汽车】【场景篇】智能座舱
  14. 风险准备(金)这样(估)算,来年工作不白干
  15. 集线器、路由器、交换机区别
  16. 笔记本电脑无法连接无线网问题
  17. 陈皓:什么是工程师文化?
  18. mysql实现物化视图详解及视图与物化视图区别
  19. Golang学习篇——UTC时间互换标准时间
  20. 数据挖掘中的数据清洗方法大全

热门文章

  1. jsch设置代理_尽管在JSch中设置了STRICT_HOST_CHECKING,但仍获取UnknownHostKey异常
  2. MySQL等值连接的示例
  3. Pod详解-生命周期-钩子函数
  4. 工厂方法模式适用场景
  5. 常用函数式接口之Supplier
  6. SpringMVC的请求-获得请求参数-自定义类型转换器
  7. idea 自动导入包和自动将没用的包去除
  8. 自定义注解事务课程回顾
  9. 设计模式------代理模式
  10. 数据拆分缺点和解决方案