[模板]manacher算法
来源:互联网 发布:固定循环编程注意? 编辑:程序博客网 时间:2024/06/01 20:54
给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.字符串长度len <= 11000000
题目来源:Luogu P3805
我们就假设长度为
先说一下几个显然的算法:
O(n3) 暴力
直接枚举所有
判断方法就是枚举
若存在
O(n2) 暴力
分两种情况讨论:
2∤ans
显然枚举所有
枚举
用
2∣ans
枚举所有
枚举
用
前方高能!!!
manacher
复杂度
网上是这样说的,可是我感觉不止啊
假设有一个字符串长这样:
我们先给它做个处理:
设处理后的串为
这样有两个好处:
不用管偶数长度的回文
不用管边界
也有些性质:
c=2ans+1
我们需要记录两个东西:
设
因为是顺次搜,所以必定会有
根据
我们假设有以下数量关系:
i<max
因为
所以
i≥max
没搜到的有木有,所以像
然后要搞大事啦:
附代码:
#define N 11000010int len,g[2*N],f[2*N],m,p,ans;int main(){ char c=gc; while(c<'a'&&c>'z') c=gc; g[0]=27; while(c>='a'&&c<='z') { len+=2; g[len]=c-'a'+1; c=gc; } len++; fr(i,1,len) { if(i<m) f[i]=min(m-i,f[p+p-i]); else f[i]=1; while(g[i+f[i]]==g[i-f[i]]) f[i]++; if(i+f[i]>m) { m=i+f[i]; p=i; } } fr(i,1,len) ans=max(ans,f[i]); printf("%d\n",ans-1); rt 0;}
阅读全文
1 0
- manacher算法模板
- hdu3068 manacher算法模板
- Manacher 算法模板
- manacher算法模板
- Manacher 算法模板
- [模板]manacher算法
- 【笔记+模板】 manacher算法
- hdu-3068 Manacher算法模板
- manacher算法模板程序 HDOJ3068
- 算法模板——Manacher
- 算法模板——manacher算法
- POJ - 3974 Palindrome(Manacher算法模板题)
- HDU 3068 最长回文(manacher算法模板)
- 最长回文串manacher算法模板
- HDU 3064 最长回文 manacher算法模板
- POJ 3974 Manacher算法(模板)
- 【模板】Manacher 算法 最长回文子串
- manacher模板
- Centos下修改mysql的默认编码方式
- PAT(Basic Level)_1012_数字分类
- Ducci Sequence
- java中的迭代器模式
- oracle常用
- [模板]manacher算法
- Digital Roots
- Ubuntu14.04下安装ros indigo opencv2.4.11
- JS学习(10)----DOM
- 南阳理工oj-水池数目
- PAT(Basic Level)_1013_数素数
- 程序员面试金典:机器人走方格II、魔术索引I
- Throwing cards away I
- 蓝牙加密三【Definition of Keys】