Manachar's Algorithm
1、模板
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int MAX=21000020;
4 char s[MAX],t[MAX<<1];
5 int p[MAX<<1],cnt=0,mid,mr;
6 void manachar()
7 {
8 t[cnt++]='$';
9 int len=strlen(s);
10 for(int i=0;i<len;i++)
11 {
12 t[cnt++]='#';
13 t[cnt++]=s[i];
14 }
15 t[cnt++]='#';
16 t[cnt]='\0';
17
18 for(int i=0;i<cnt;i++)
19 {
20 p[i]=i<mr?min(p[(mid<<1)-i],mr-i):1;
21 for(;t[p[i]+i]==t[i-p[i]] and p[i]+i<cnt;p[i]++)
22 if(p[i]+i>mr)
23 {
24 mid=i;
25 mr=p[i]+i;
26 }
27 }
28 }
29 int main()
30 {
31 scanf("%s",s);
32 manachar();
33 int ans=1;
34 for(int i=0;i<cnt;i++)
35 ans=max(ans,p[i]);
36 printf("%d",ans-1);
37 return 0;
38 }
2、一些结论
1、在往后推maxr时,此时的p[i]就是以maxr为结尾的最长回文串(例题:最长双回文串(有坑))
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int MAX=1e5+10;
4 char pic[MAX],s1[MAX<<1],s2[MAX<<1];
5 int p1[MAX<<1],p2[MAX<<1],cnt=2;
6 int ans1[MAX<<1] ,ans2[MAX<<1],len;
7 void manachar(char * s,int * p,int * ans)
8 {
9 int mid=0,mr=0;
10 for(int i=0;i<cnt;i++)
11 {
12 p[i]=i<mr?min(p[mid*2-i],mr-i):1;
13 for(;s[p[i]+i]==s[i-p[i]];p[i]++)
14 if(i+p[i]>mr)
15 {
16 mr=i+p[i];
17 ans[mr]=p[i];
18 mid=i;
19 }
20 }
21 }
22 int main()
23 {
24 scanf("%s",pic);
25 len=strlen(pic);
26 s1[0]=s2[0]='$';
27 s1[1]=s2[1]='#';
28 for(int i=0;i<len;i++)
29 {
30 s1[cnt]=pic[i];
31 s2[cnt]=pic[len-i-1];
32 s1[++cnt]='#';
33 s2[cnt++]='#';
34 }
35 cnt++;
36 s1[cnt]=s2[cnt]='\0';
37 manachar(s1,p1,ans1);
38 manachar(s2,p2,ans2);
39 int j=cnt-4,ans=2;
40 for(int i=3;i<cnt-2;i++)
41 {
42 if(s1[i]=='#')
43 ans=max(ans,ans1[i]+ans2[j]);
44 j--;
45 }
46 cout<<ans<<endl;
47 return 0;
48 }
2、
Manachar's Algorithm的更多相关文章
- Manachar’s Algorithm
Manachar's Algorithm Longest palindromic substring - Wikipedia https://en.wikipedia.org/wiki/Longes ...
- bzoj 3676 回文串 manachar+hash
考虑每个回文串,它一定是它中心字母的最长回文串两侧去掉同样数量的字符后的一个子串. 所以我们可以用manachar求出每一位的回文半径,放到哈希表里并标记出它的下一个子串. 最后拓扑排序递推就行了.. ...
- BZOJ 2342 & manachar+最优性剪枝
题意: 求最长回文串,串的两边都是回文串. Solution: manachar预处理然后暴力找... Code: #include <iostream> #include <cst ...
- bzoj 3160: 万径人踪灭 manachar + FFT
3160: 万径人踪灭 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 133 Solved: 80[Submit][Status][Discuss] ...
- hdu 3068 最长回文(manachar模板)
Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如aba, abba等 Input 输 ...
- HDU 3294 Girls' research(manachar模板题)
Girls' researchTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- HDU 3068 最长回文(manachar算法)
最长回文 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- Manachar算法详解
求解最长回文串之Manachar算法 问题类型: 输入一个字符串,求出其中最大的回文子串.子串的含义是:在原串中连续出现的字符串片段. 回文的含义是:正着看和倒着看相同,如abba和yyxyy. 这类 ...
- hdu 4513 吉哥系列故事——完美队形II (manachar算法)
吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) P ...
随机推荐
- 元类、orm
目录 一.内置函数exec 二.元类 1. 什么是元类 2. 元类的作用 3. 创建类的两种方法 4. 怎么自定义创建元类 三.ORM 1. ORM中可能会遇到的问题 2. ORM中元类需要解决的问题 ...
- JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)
一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...
- 使用dlopen加载动态库
目录 概述 接口 C CMakeLists.txt src/main.c src/add.c ./dlopen_test C++ CMakeLists.txt src/main.cpp src/add ...
- 后端程序员之路 21、一个cgi的c++封装
在"3.fastcgi.fastcgi++"中,我们了解了cgi,也尝试了fastcgi++,这里,再记录一种对fastcgi的封装. 1.cgi接口层 request_t ...
- iOS之CoreBluetooth
思路 手机与设备间的通讯方式CoreBluetooth是比较常见且通用的.在iOS开发中需明晰以下几点 蓝牙4.0最多可联机7个设备,iPhone6以上都是蓝牙4.0 两台iPhone并不直接通过蓝牙 ...
- HDOJ-1160(最长上升子序列变形)
FatMouse's Speed HDOJ-1160 注意输出长度的时候不是输出dp[n] #include<bits/stdc++.h> using namespace std; con ...
- 通过穷举法快速破解excel或word加密文档最高15位密码
1.打开文件 2.工具 --- 宏 ---- 录制新宏 --- 输入名字如 :aa 3.停止录制 ( 这样得到一个空宏 ) 4.工具 --- 宏 ---- 宏 , 选 aa, 点编辑按钮 5.删除窗口 ...
- Python中的描述器
21.描述器:Descriptors 1)描述器的表现 用到三个魔术方法.__get__() __set__() __delete__() 方法签名如下: object.__get__(self ...
- 史上超强拷贝仓——GitHub 热点速览 v.21.11
作者:HelloGitHub-小鱼干 Clone-Wars 是真的强,能细数 70+ 知名应用网站的源码,即便你不看代码,也可以了解下各大网站的所用技术栈.同样很强的是用 OpenCV 实现的图片转 ...
- kettle 执行 kjb 临时文件夹 /tmp permission denied 问题
编写完的 kettle job (kjb文件) 放在服务器上执行的时候出现了奇怪的错误: # 执行 kjb ./kitchen.sh -file:/opt/code/ods/ods_inc.kjb # ...