70pts TLE 求助
查看原帖
70pts TLE 求助
1120928
XuYu0317楼主2024/5/30 20:44

RT

#include <bits/stdc++.h>

using namespace std;
int n, ans, pos, r, tt;
int p[22000020];
char s[22000020], t[22000020];
int main() {
	scanf("%d", &tt);
	while (tt--) {
		memset(p, 0, sizeof(p));
		ans = -1;
		scanf("%s", s+1);
		n = strlen(s+1);
		
		for (int i = 1, j = 0; i <= n; ++i) {
			t[++j] = '*';
			t[++j]=s[i];
		}
	
		t[2*n+1]='*';
		t[0]= '*';
		n = n * 2 + 1;
		
		for (int i = 1; i <= n; i ++) {
			if (i > r) {
				p[i] = 0;
			}
			else {
				p[i] = min(r-i, p[pos*2-1]);
			}

			while (t[i-p[i]-1] == t[i+p[i]+1]) {
				++p[i];
			}
	
			if (i +p[i] > r) {
				r = i + p[i];
				pos = i;
			}
			ans = max(ans, p[i]);
		}
		
		cout << ans << endl;
	}
	return 0;
}
2024/5/30 20:44
加载中...