正题

题目链接:https://www.luogu.com.cn/problem/P5496


题目大意

长度为nnn的字符串,求每个字符串作为结尾有多少个回文串。


解题思路

PAMPAMPAM。

下面是个人对PAMPAMPAM的一些理解(不是讲解):

  1. 每个节点表示一个回文串,就是根到其的路径上的字符为一半。
  2. 为了方便表示长度为奇数的和偶数的,这里用了两个根节点。一个奇数根长度为−1-1−1,偶数根长度为000。偶数根的failfailfail指向奇数根。
  3. failfailfail指针表示该回文串的最长回文后缀(不包括整串)
  4. 加入新节点时,在上个节点的基础上不停的往后跳failfailfail直到该回文串的前一个字符等于当且字符。
  5. 新节点的failfailfail值同理在新点的父节点的failfailfail上面跳failfailfail。
  6. 时间复杂度O(n)O(n)O(n),空间复杂度O(nT)O(nT)O(nT)

codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2e6+10;
int n,len[N],fail[N],num[N],next[N][26],cnt,m,last;
char s[N];
int get_fail(int x){for(;s[n-len[x]-1]!=s[n];)x=fail[x];return x;
}
int Insert(){int x=get_fail(last);if(!next[x][s[n]]){len[++cnt]=len[x]+2;int y=get_fail(fail[x]);fail[cnt]=next[y][s[n]];num[cnt]=num[fail[cnt]]+1;next[x][s[n]]=cnt;}return (last=next[x][s[n]]);
}
int main()
{scanf("%s",s+1);m=strlen(s+1);s[0]=26;len[1]=-1;fail[0]=cnt=1;int k=0;for(n=1;n<=m;n++){s[n]=(s[n]-'a'+k)%26;printf("%d ",k=num[Insert()]);}
}

P5496-[模板]回文自动机【PAM】相关推荐

  1. 模板:回文自动机(PAM)

    所谓回文自动机,就是关于回文的自动机. (逃) 前言 小清新自动机. 经历过SAM的大风大浪,这个相比而言好理解多了,感觉也许应该先学这个再学SAM- 解析 和trie.AC自动机.SAM等类似的,P ...

  2. 洛谷试炼日记(trie树,AC自动机,回文自动机)(解题报告)

    文章目录 **Trie树** P4683 [IOI2008] Type Printer 打印机 **AC自动机** P2444 [POI2000]病毒 **回文自动机** P5496 [模板]回文自动 ...

  3. 【回文自动机】bzoj3676 [Apio2014]回文串

    回文自动机讲解!http://blog.csdn.net/u013368721/article/details/42100363 pam上每个点代表本质不同的回文子串.len(i)代表长度,cnt(i ...

  4. 回文树(回文自动机) - URAL 1960 Palindromes and Super Abilities

     Palindromes and Super Abilities Problem's Link:  http://acm.timus.ru/problem.aspx?space=1&num=1 ...

  5. 【知识总结】回文自动机(Palindrome_Automaton)

    参考资料:Palindromic Tree--回文树[处理一类回文串问题的强力工具](请注意,其中似乎有一些错误) 回文自动机似乎和回文树是同一个东西qwq? 回文自动机(PAM)是一种处理回文串的工 ...

  6. CodeForces - 1326D2 Prefix-Suffix Palindrome (Hard version)(马拉车/回文自动机)

    题目链接:点击查看 题目大意:给出一个字符串,求出截取前缀和后缀后拼接而成的最长回文串,前缀和后缀不能相交 题目分析:题意很简单,思路也不难想,读完题后我尝试性的看了看样例,发现前缀和后缀拼接后如果能 ...

  7. SPOJ - NUMOFPAL Number of Palindromes(回文自动机)

    题目链接:点击查看 题目大意:给出一个字符串s,问一共有多少个不同的回文子串 题目分析:咕咕咕了好几个月的回文自动机终于算是学会了,会了之后感觉还是蛮简单的,多练练手加强一下对模板的理解吧,这个题目显 ...

  8. 2019ICPC(徐州) - Colorful String(哈希+二分+动态规划/回文自动机)

    题目链接:点击查看 题目大意:给出一个字符串,询问该字符串中的所有回文子串中,各有多少不同的字母 题目分析:这个题题意很简单,在比赛的时候看到字符串第一反应是哈希,哈希+暴力+线段树果不其然的T掉了. ...

  9. 怎么判断一个字符串的最长回文子串是否在头尾_回文自动机入门

    缘起 回文自动机(Palindrome auto machine PAM,有些地方称之为回文树)是回文问题的大杀器~  本文使用一道很简单的题目入门这个精巧的数据结构. hdu 2163 Palind ...

  10. BZOJ 4480: [Jsoi2013]快乐的jyy(回文自动机)

    Description [故事背景] JYY在JSOI有很多很多的好朋友,比如PUPPY,KFC还有PUPPUP.因为 有了这么多的好朋友,所以JYY每天都很快乐.某天,JYY发现好朋友之间关 系的好 ...

最新文章

  1. redis有几种数据类型
  2. 教你用netstat-实践案例
  3. UIButton下面添加滑动的线
  4. 增强包_机电工程学院开展“情暖冬日,爱在机电”冬至包饺子活动
  5. 深入浅出C++虚函数的vptr与vtable
  6. python中 是什么类型_浅谈python中的变量默认是什么类型
  7. Redis主从同步和持久化
  8. Java核心篇之JVM--day3
  9. 爬虫之HTTP基础知识
  10. 洛谷 P4017 最大食物链计数
  11. php验证注册不能纯数字,php写一个纯数字验证码教学
  12. 冒泡排序和快速排序的区别
  13. 静态链表(简单介绍)
  14. Socket长连接和短连接的区别
  15. 关于知乎专栏个性域名报错`域名格式不正确`的问题
  16. FPGA之旅设计99例之第九例-----驱动0.96寸OLED屏
  17. 实例学习Ansible系列:颜色与设定
  18. xp找不到局域网内其它计算机,在W10局域网内找不到其它共享电脑的解决方案
  19. C#语言实例源码系列-实现屏幕放大器和取色
  20. Go pprof 性能分析工具 - 详细使用图解

热门文章

  1. 戴尔新版bios设置中文_戴尔电脑装机过程
  2. linux怎么搜索特定文件夹,linux如何在特定文件夹中查找特定文件
  3. sql 日期和当前日期时间差_详解PostgreSQL 如何获取当前日期时间
  4. 算法题目——生成括号匹配
  5. 后端学习 - Spring5
  6. leetcode94. 二叉树的中序遍历(左中右)
  7. C++中 Map的了解与基本用法(代码演示+自我总结+map中一对多的用法)
  8. POJ 3984 迷宫问题
  9. [蓝桥杯2015决赛]胡同门牌号-模拟+枚举
  10. 运动会加油稿计算机学院,信息工程学院运动会加油稿