社区讨论

第四个点TLE求助

P3805【模板】Manacher参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mi7dg5w5
此快照首次捕获于
2025/11/20 19:52
4 个月前
此快照最后确认于
2025/11/20 19:52
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;

char a[11000000+5],t[2*11000000+5];
int p[2*11000000+5];

int manacher(void){
//	memset(t,0,sizeof(t));
	t[0]='$';
	int len=0;
	char tmp;
	while((tmp=getchar())!='\n'&&tmp!=EOF){
		t[++len]='#';
		t[++len]=tmp;
	}
	t[++len]='#';
	int lst=len;
	int r=0,m=0;
	int maxb=0;
	for(int i=0;i<=lst;++i){
		int dc=2*m-i;
		if(r-i>dc){
			p[i]=min(p[dc],r-i);
		}
		else{
			p[i]=1;
		}
		while(t[i+p[i]]==t[i-p[i]]){
			++p[i];
		}
		if(i+p[i]>r){
			m=i;
			r=i+p[i];
		}
		if(p[i]>maxb){
			maxb=p[i];
		}
	}
	return maxb-1;
}

int main(){
	printf("%d\n",manacher());
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...