社区讨论

TLE+RE

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@locs2kyh
此快照首次捕获于
2023/10/30 18:49
2 年前
此快照最后确认于
2023/11/05 05:33
2 年前
查看原帖
下面就是 Manacher 的模板写法……为什么有两个测试点RE, 还有四个TLE?
CPP
#include <bits/stdc++.h>
using namespace std;

const int N = 22000003;
char a[N];
int len[N], ans = 1, n, maxx, maxn;

int main() {
	a[0] = '$'; a[n = 1] = '#';
	char ch = getchar();
	while('a' <= ch && ch <= 'z') {
		a[++ n] = ch;
		a[++ n] = '#';
		ch = getchar();
	}
	maxn = maxx = 1;
	for (int i = 1; i <= n; ++ i) {
		len[i] = min(len[(maxn << 1) - i], maxn - i);
		while(a[i - len[i]] == a[i + len[i]]) 
			len[i] ++;
		if(i + len[i] > maxn) {
			maxn = i + len[i];
			maxx = i;
		}
		ans = max(ans, len[i] - 1);
	}
	printf("%d\n", ans);
	return 0;
}
 

回复

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

正在加载回复...