luogu P3805 【模板】manacher算法
2024-09-01 20:52:00
题目描述
给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.
字符串长度为n
输入格式
一行小写英文字符a,b,c...y,z组成的字符串S
输出格式
一个整数表示答案
马拉车算法,O(n)解决,巧妙的利用对称性
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=11000000+20;
char data[N<<1];
int p[N<<1],cnt,ans;
inline void qr(){
char c=getchar();
data[0]='~',data[cnt=1]='|';
while(c<'a'||c>'z')c=getchar();
while(c>='a'&&c<='z')
data[++cnt]=c,data[++cnt]='|',c=getchar();
}
int main(){
qr();
for(int t=1,r=0,mid=0;t<=cnt;++t){
if(t<=r)p[t]=min(p[(mid<<1)-t],r-t+1);
while(data[t-p[t]]==data[t+p[t]])++p[t];
if(p[t]+t>r)r=p[t]+t-1,mid=t;
if(p[t]>ans)ans=p[t];
}
printf("%d\n",ans-1);
}
最新文章
- 域名扫描工具Fierce
- calender 软文
- 【linux】find删除指定时间之前的文件
- MVC传递Model
- 执行大量的Redis命令,担心效率问题?用Pipelining试试吧~
- 通俗易懂的深入理解js闭包
- Android-LogCat日志工具(一)
- xilinx仿真库的作用(原创)
- python学习===打印时间
- mssql sqlserver 自动备份存储过程的方法分享
- Netty入门(一)之webSocket聊天室
- JXNU暑期选拔赛
- 利用pandas将numpy数组导出生成excel
- 【转】Linux 如何通过命令仅获取IP地址
- 【Java】 大话数据结构(17) 排序算法(4) (归并排序)
- iview,用render函数渲染
- C语言 &#183; 日期计算
- 批量删除Redis数据库中的Key
- Android 开发工具类 05_Logcat 统一管理类
- js事件的捕获和冒泡阶段