蜜汁TLE,真相原来是这样
查看原帖
蜜汁TLE,真相原来是这样
80953
Moral_and_Law楼主2020/7/30 21:35
#include <bits/stdc++.h>
using namespace std;
int p[22000022],ans=-1;
char s[22000022],ss[22000022];
int init(){
	int i,j=2;ss[0]='$';ss[1]='#';
	for(i=0;i<strlen(s);i++){ss[j++]=s[i];ss[j++]='#';}
	ss[j]='\0';return j;
}
int manacher(){
	int id,m=0,i,l=init();
	for(i=1;i<=l;i++){
		if(i<m) p[i]=min(p[2*id-i],m-i);else p[i]=1;
		while(ss[i-p[i]]==ss[i+p[i]])p[i]++;
		if(m<i+p[i]){id=i;m=p[i]+i;}
		ans=max(ans,p[i]-1);
	}return ans;
}
int main(){
	scanf("%s",&s);
	printf("%d",manacher());
	return 0;
}

这是TLE代码,但是当我们将init()改成

int init(){
	int i,j=2,LEN=strlen(s);ss[0]='$';ss[1]='#';
	for(i=0;i<LEN;i++){ss[j++]=s[i];ss[j++]='#';}
	ss[j]='\0';return j;
}

之后???就A了????????哪位大佬能给蒟蒻科普一下(瑟瑟发抖)

2020/7/30 21:35
加载中...