78pts求助!
查看原帖
78pts求助!
241984
Kira_Kano楼主2023/11/19 10:52

本机测的时候发现纯回文串(比如样例)过不了

但是普通的串(比如kirakanoisalaji)可以过

很奇怪……

代码:

#include<bits/stdc++.h>
using namespace std;
int n,p[22000002];
char s[11000002],t[22000003];
void manacher() {
	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++) {
		if(i>R)
			p[i]=1;
		else
			p[i]=min(p[2*M-i],R-i+1);
		while(i-p[i]>0 and i+p[i]<=m and t[i-p[i]]==t[i+p[i]])
			++p[i];
		if(i+p[i]-1>R)
			M=i;
			R=i+p[i]-1;
	}
	int ans=0;
	for(int i=1; i<=m; i++) {
		ans=max(ans,p[i]);
	}
	printf("%d\n",ans-1);
}
int main(){
	scanf("%s",s);
	manacher();
}

提交记录link

2023/11/19 10:52
加载中...