首页 > 其他分享 >P3805 【模板】manacher

P3805 【模板】manacher

时间:2024-03-10 17:22:30浏览次数:21  
标签:int manacher ++ ans P3805 include 模板

https://www.luogu.com.cn/problem/P3805
板子题

比较模式的代码(书上整理):

#include<iostream>
#include<vector>
#include<algorithm>
#include<math.h>
#include<sstream>
#include<string>
#include<string.h>
#include<iomanip>
#include<map>
#include<queue>
#include<limits.h>
#include<climits>
using namespace std;
typedef long long ll;


const int N = 11000002;
int n, P[N *2];
char a[N], S[N *2];
void change()//功能:改成"$#x#x#^",比较值得注意的是:前后的末尾都是#再结束。
{
	n = strlen(a);//不要用sizeof!
	S[0] = '$';
	int k = 2;
	S[1] = '#';
	for (int i = 0; i < n; i++)
	{
		S[k++] = a[i];
		S[k++] = '#';
	}
	S[k++] = '^';
	n = k;
}
void manacher()
{
	int R=0, C;
	for (int i = 0; i < n; i++)
	{
		if (i < R)P[i] = min(P[C * 2 - i], P[C] + C - i);//核心,比大小
		else P[i] = 1;
		while (S[i + P[i]] == S[i - P[i]])P[i]++;//左右开弓
		if (i + P[i] > R)
		{
			R = i + P[i];
			C = i;
		}
	}
}


int main()
{
	scanf("%s", a);
	change();
	manacher();
	int ans = 1;
	for (int i = 0; i < n; i++)ans = max(ans, P[i]);
	cout << ans -1 ;
	return 0;
}

标签:int,manacher,++,ans,P3805,include,模板
From: https://www.cnblogs.com/zzzsacmblog/p/18064360

相关文章

  • Manacher 学习笔记
    \(\text{Manacher}\)学习笔记定义所谓回文串,指的是对于一个字符串\(s\),若它的长为\(n\),下标从\(1\)到\(n\),如果\(\foralli\in[1,n],s_i=s_{n+1-i}\),那么字符串\(s\)是一个回文串。给定一个字符串\(s\),求解它总共的回文子串个数。对于这一类问题的求解,我们发现,因为......
  • manacher
    P3805【模板】manacher算法题意给定一个字符串,求所有字串中的最长回文串。思路暴力肯定过不了,如果在一个已经求出来的回文串中知道左半边,也肯定知道右半边,那么设\(d_i\)为以\(i\)为中心的回文串(奇数长度)的最长半径,那么在一个回文串\([l,r]\)中,知道\(d_{l+(r-i)}(......
  • 模板
    intBSGS(inta,intb){ inty=sqrt(p)+1; gp_hash_table<int,int>mp; intt=b; for(intn=0;n<=y;++n,t=Mul(t,a))mp[t]=n; inttmp=1; for(inti=1;i<=y;++i,tmp=Mul(tmp,a)); t=tmp; for(intm=1;m&l......
  • Java登陆第三十二天——ES6(一)let、const、模板字符串、解构表达式、箭头函数
    所谓ECMAScript6也就是JS6。这次更新带来了大量的新特性,使JS代码更简洁,更强大。复习JS请走:JS入门JS6文档请走:JS6菜鸟教程ES6新增了let和const关键字,用作声明变量let相较于var,let声明的变量更规范。ES6更推荐使用let。let不可重复声明let可以作为成员变量:(let遇见非函数......
  • 二维坐标离散化模板
    structTwo_D_Discrete{ intn,tot1=1,tot2=1; vector<vector<int>>mp; vector<int>x,y,nx,ny; vector<pair<i64,i64>>a; vector<PII>New; Two_D_Discrete(int_n,vector<pair<i64,i64>>&_a):......
  • SpringBoot 支付宝付款接口类、支付异步回调函数模板
    1.付款接口类1.1.引入Maven依赖<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.38.221.ALL</version></dependency>1.2.将下面代码保存为AlipayTemplate.java@Config......
  • 1.Prefix前缀和【模板】
    [[#题目描述|题目描述]][[#输入描述|输入描述]][[#输出描述|输出描述]][[#输入样例1|输入样例1]][[#输出样例1|输出样例1]][[#暴力穷举|暴力穷举]][[#前缀和数组|前缀和数组]]题目描述给定义一个数组a,有q次询问,对于每次询问:给定两个整数l,r,求出${a_l}$$+$${a_{l+1}}$......
  • 2.diff差分【模板】
    [[#差分数组|差分数组]][[#差分数组#三个数组的关系|三个数组的关系]][[#题目描述|题目描述]][[#输入描述|输入描述]][[#输出描述|输出描述]][[#输入样例1|输入样例1]][[#输出样例1|输出样例1]]差分数组如下叫做差分数组\[d_{i}=a_{i}-a_{i-1}\]又有\[\su......
  • 简单实现邮件模板功能
    系统中经常有需要发送提醒邮件的需求,而且邮件类型和内容往往又不同,有些还需要跟业务字段做关联。这种情况下,就需要用到邮件模板功能,可以通过在模板中定义业务字段标记,通过模板引擎或自定义代码来实现这些字段的填充。下面是一个自己写的简单的,字符串替换方式实现的邮件模板功能。......
  • Maven安装本地的jar包和创建带模板的自定义项目
    Maven安装本地的jar包如果没配置Maven的环境变量,需要先CD到maven的安装目录,因为没配置环境变量,mvn命令是无法在maven安装目录以外的目录运行。cdC:\Maven\apache-maven-3.6.3\bin然后执行下面命令格式如下:mvninstall:install-file//固定格式,maven的语法-Dfile=ali......