社区讨论
第四个点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 条回复,欢迎继续交流。
正在加载回复...