初始化问题?
查看原帖
初始化问题?
315205
Kniqht楼主2023/11/9 10:29

过了又又倍经验https://www.luogu.com.cn/problem/P4287

但是这个寄了,没太想明白初始化哪里有问题,拜谢大佬

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
char b[N],s[N];
int n;
void init(){
	int k=2;
	s[0]='^',s[1]='#';
	for(int i=1;i<=n;i++) s[k++]=b[i],s[k++]='#';
	s[k]='$';
	n=k-1;
}
int p[N],ans;
void manacher(){
	int mr=0,mid;
	for(int i=1;i<=n;i++){
		if(i<mr) p[i]=min(p[mid*2-i],mr-i);
		else p[i]=1;
		while(s[i+p[i]]==s[i-p[i]]) p[i]++;
		if(i+p[i]>mr){
			if(s[i]=='#'){
				for(int j=max(mr,i+4);j<i+p[i];j++)
					if((j-i)%4==0 && p[i-(j-i)/2]>(j-i)/2)ans=max(ans,j-i);
			}
			mr=i+p[i];
			mid=i;
		}
	} 
}
signed main(){
	int T;scanf("%d",&T);
	while(T--){
	ans=0;
	scanf("%s",b+1);
	n=strlen(b+1);
	init();
	manacher();
	printf("%d",ans);
	for(int i=1;i<=n;i++) p[i]=0;
	for(int i=1;i<=n+1;i++) s[i]='@';
	if(T) putchar('\n');
	}
	return 0;
}

2023/11/9 10:29
加载中...