求助
查看原帖
求助
358971
朦胧_XY楼主2023/9/17 11:48

52pts

#include <bits/stdc++.h>
using namespace std;
const int N = 44000005;
int n, pal[N], ans = 1;
char S[N<<1], c;
void manacher(){
	int r = 0, mid;
	for(int i = 1; i < n; i++){
		if(i < r)
			pal[i] = min(pal[(mid<<1) - i], r - i + 1);
		else pal[i] = 1;
		while(S[i + pal[i]] == S[i - pal[i]]) pal[i]++;
		if(i + pal[i] > r) r = i + pal[i], mid = i;
	}
}
int main(){
	c = getchar();
	S[0] = S[++n] = '#';
	while(~c){
		S[++n] = c;
		S[++n] = '#';
		c = getchar();
	}
	S[++n] = 0;
	manacher();
	for(int i = 0; i < n; i++)
		ans = max(ans, pal[i]);
	printf("%d\n", ans-1);
	return 0;
}

把12行的 r - i + 1 改成 r - i 就过了,不知道为什么,从 i 到 r 的最大半径不就是 r-i+1 吗?

2023/9/17 11:48
加载中...