首页 > 其他分享 >洛谷:manacher

洛谷:manacher

时间:2023-09-17 22:55:23浏览次数:30  
标签:洛谷 1.1 int manacher texttt 样例 字符串

【模板】manacher 算法

题目描述

给出一个只由小写英文字符 \(\texttt a,\texttt b,\texttt c,\ldots\texttt y,\texttt z\) 组成的字符串 \(S\) ,求 \(S\) 中最长回文串的长度 。

字符串长度为 \(n\)。

输入格式

一行小写英文字符 \(\texttt a,\texttt b,\texttt c,\cdots,\texttt y,\texttt z\) 组成的字符串 \(S\)。

输出格式

一个整数表示答案。

样例 #1

样例输入 #1

aaa

样例输出 #1

3

提示

\(1\le n\le 1.1\times 10^7\)。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=1.1e7+10;
char s[N],t[N<<1];
int p[N<<1];
void manacher()
{
	int n=strlen(s+1);
	int m=0;
	t[++m]='$';
	for(int i=1;i<=n;++i)
	t[++m]=s[i],t[++m]='$';
	int M=0,R=0;
	for(int i=1;i<=m;++i)
	{
		p[i]=1;
		if(i<=R)
		{
			p[i]=min(p[M*2-i],R-i+1);
		}
		int &k=p[i];
		while(i-k>0&&i+k<=m&&t[i-k]==t[i+k]) k++;
		if(i+k-1>R) M=i,R=i+k-1;
	}
	int ans=0;
	for(int i=1;i<=m;++i) ans=max(p[i],ans);
	cout<<ans-1<<'\n';
}
void solve()
{
    cin>>s+1;
    manacher();
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T=1;
    //cin>>T;
    while(T--)
    {
        solve();
    }
    return 0;
}

标签:洛谷,1.1,int,manacher,texttt,样例,字符串
From: https://www.cnblogs.com/ruoye123456/p/17710049.html

相关文章

  • Manacher——最快的找最长回文算法
    Manacher马拉车——Manacher算法解决的问题给定一串字符串str,求str内的最长回文子串,我们可以从最朴素的算法开始,逐渐深入Manacher算法。朴素穷举法一直枚举字符串str的子串,并判断子串是否为回文。这个时间复杂度直接到\(O(n^3)\)了,一般题目都会超时。中心扩散法作为一个回文......
  • 洛谷P4316 绿豆蛙的归宿(期望dp)
    原题链接:https://www.luogu.com.cn/problem/P4316这题是经典的概率dp题,通常看到的题解都是逆推的做法,实际上理解了题目的含义后发现逆推其实是正推的一种特殊情况而已正推做法:定义dp[i]表示从1~i的路径长度的期望,那么dp[1]=0,答案就是dp[n]状态转移公式://u->vdp[v]=(d......
  • 洛谷题解 | P1046 陶陶摘苹果
    ​目录题目描述输入格式输出格式输入输出样例说明/提示题目思路AC代码题目描述陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个 30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现......
  • 洛谷P5707 【深基2.例12】上学迟到
    题目描述学校和yyy的家之间的距离为 ss 米,而yyy以 vv 米每分钟的速度匀速走向学校。在上学的路上,yyy还要额外花费 1010 分钟的时间进行垃圾分类。学校要求必须在上午 \textrm{8:00}8:00 到达,请计算在不迟到的前提下,yyy最晚能什么时候出门。由于路途遥远,yyy可......
  • 洛谷 P9518 queue
    一眼模拟。需要维护的东西可以根据操作求得:start:正在玩游戏的\(1\)或\(2\)个人;arrive:当前在排队但没玩游戏的队列、每个人是否在排队、游玩;leave:每个人是否在排队、游玩。如何维护正在玩游戏的人:我们使用\(p_1\)、\(p_2\)两变量存储,优先保证\(p_1\)有值,当\(p_1......
  • 洛谷OJ [P5018 对称二叉树] (深度优先搜索、二叉树、思维)
    P5018[NOIP2018普及组]对称二叉树题意:给定一棵树,树上的每个结点有一个权值,问你这棵树的子树中节点数最多的对称二叉树的节点数是多少?对称二叉树的定义如下:对于树中的每一个结点,要么没有子节点,要么既有左儿子,又有右节点,且对称位置的结点点权相等。输入格式:第一行......
  • 【dfs基础题】洛谷P1219题解
    题目大意给定棋盘的规格为\(n×n\),现在要摆\(n\)个皇后,使得每个皇后不能互相攻击。题目解答由题意可知,如果两个皇后在同一行或同一列或同一对角线,那么就会互相攻击。那么就简单了,若当前要摆的是第\(i\)个皇后,那么只需要for循环一遍前面的\(i-1\)个皇后,判断前面的皇后......
  • 洛谷[P1305 新二叉树] Tag:二叉树、基础数据结构
    P1305新二叉树题目描述:输入一串二叉树,输出其前序遍历。输入格式:第一行为二叉树的节点数$n(1\len\le26)$,后面\(n\)行,每一个字母为节点,后两个字母分别为其左右儿子。特别地,数据保证第一行读入的节点必为根节点。空节点用*表示输出格式:二叉树的前序遍历。思路:对......
  • 洛谷 CF707C Pythagorean Triples の 题解
    这道题是一道数论题,不可用暴力通过,因为输入范围极大,基本上循环是不能在这道题上使用的了。前面大佬们讲的我听不懂,于是在教练的帮助下,我利用题面给出的多组样例找到了规律。在此之前,我们先设输入的数为\(n\)。\(n\)分三种情况。\(n\)是奇数;\(n\)是偶数;\(n\)小于等于......
  • 洛谷 P9503『MGOI』Simple Round I | B. 魔法照相馆 の 题解
    这道题是一道模拟题,坑点不多,但是细节特多,所以导致大部分人\(A\)不了这道题。这道题我也写了注释,如果思路没明白可以看代码和注释的。先创建一个长度为\(3\)的字符串\(s1\),这个字符串的意思就是模拟现在的这几个幕布的情况,这里分了四个字符代表着四种情况,详细如下该字符串......