首页 > 编程语言 >51Nod 1088 最长回文子串——————Manacher,马拉车算法

51Nod 1088 最长回文子串——————Manacher,马拉车算法

时间:2022-10-18 16:31:36浏览次数:71  
标签:Ma 51Nod Manacher ++ 1088 int Mp mx id



​ 51Nod 1088 最长回文子串​

基准时间限制:1 秒
空间限制:131072 KB
分值: 0
难度:基础题


回文串是指这种左右对称的字符串。
输入一个字符串,输出里最长回文子串的长度。


Input

输入Str(Str的长度 <= 1000)

Output

输出最长回文子串的长度L。

Input示例

daabaac

Output示例

5


#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e4+7;
char s[MAXN];
char Ma[MAXN*2];
int Mp[MAXN*2];

void Manacher(char *s,int len)
{
int l=0;
Ma[l++]='$';
Ma[l++]='#';
for(int i=0;i<len;i++)
{
Ma[l++]=s[i];
Ma[l++]='#';
}
Ma[l] = 0;
int id = 0;//
int mx = 0;//mx 代表以 id 为中心的最长回文的右边界
for(int i=0;i<l;i++)
{
Mp[i] = mx>i?min(Mp[2*id-i],mx-i):1;// 2*id-i 是 i 关于 id 的对称点
while(Ma[i + Mp[i]] == Ma[i - Mp[i]] )//左侧字符和右侧字符相等的话,就让Mp[i]++
Mp[i]++;
if(i + Mp[i] > mx)//更新mx 和 id 的值
{
mx = i + Mp[i];
id = i;
}
}

}

int main()
{
while(~scanf("%s",s))
{
int len=strlen(s);
int ans=0;
Manacher(s,len);
for(int i=0;i<2*len+2;i++)
ans = max(ans, Mp[i]-1);
printf("%d\n",ans);
}
return 0;
}


标签:Ma,51Nod,Manacher,++,1088,int,Mp,mx,id
From: https://blog.51cto.com/u_15834888/5767191

相关文章

  • [51nod 1393] 0和1相等串 前缀和
    #include<cstdio>#include<cstring>#definemaxn1000050#definemax(a,b)((a)>(b)?(a):(b))usingnamespacestd;intl[maxn<<1];//即maxn*2inta[maxn];chars......
  • Manacher 和 回文自动机
    引入求串\(s\)中的回文子串数量。\(|s|\le10^7\)。做法定义一个长为\(2k-1(k\inN)\)的回文串\(s\)的回文中心为\(s_k\)。则子串\(s_2\sims_{2k-2}\),\(s_3\si......
  • 51Nod5440 奇怪的树
    题面我捡到了一棵树。这棵树上有n个点,被标号为1…n,其中1号结点为根节点。奇怪的是,每个点有一个体积c[i]。更奇怪的是,每个点有一个权值a[i]。更更奇怪的是,每个点......
  • 简单易懂的manacher算法讲解
    manacher求最长回文子串的算法(顺便还能求出来以每个点为中心的最长回文子串)介绍先来一道模板题:P3805【模板】manacher算法先考虑一下小学二年级都会的纯暴力解法:以每......
  • 【Nginx运行报错】[alert] could not open error log file: CreateFile和 [emerg] 108
    第一个问题:[alert]couldnotopenerrorlogfile:CreateFile()“logs/error.log”failed(3:Thesystemcannotfindthepathspecified)(上文大致意思为)不能打开......
  • 51nod 省选3 4补题
    3B考虑分手是祝愿的推法。再者,为什么能把每一维的行走都看成步,然后只要计算总步数的答案?某一维到边界后就不会在走了。可能是某些维交替进行的撤销操作不一定......
  • 1088 三人行——20分
    子曰:“三人行,必有我师焉。择其善者而从之,其不善者而改之。”本题给定甲、乙、丙三个人的能力值关系为:甲的能力值确定是2位正整数;把甲的能力值的2个数字调换位置就是乙......
  • 2022年多校冲刺NOIP联训测试13 && 51nod2023省选联训 第三场
    A隔离二分答案,简单\(check\)一下即可code#include<cstring>#include<algorithm>#include<cstdio>#include<queue>#include<vector>#include<set>#include<map>......
  • 51nod 模拟2
    A.直接pow,代码略B分子分母分开处理\(a/b\)转移到\(\frac{\frac{a}{b}+\frac{b}{a}}{2}=\frac{a^2+b^2}{2ab}\)然后\(a'=a^2+b^2,b'=2ab\)所以\(a'+b'=(a+b)^2,a'......