萌新新学马拉车求助,5个TLE
查看原帖
萌新新学马拉车求助,5个TLE
59174
wu_ming无名楼主2024/3/7 22:42
#include<bits/stdc++.h>
using namespace std;
const int maxn = 11000005, maxn2 = 22000005;
char s[maxn], s2[maxn2];
int m[maxn2], len;
void Manacher() {
    int l = 0, mx = 1, id = 0;
    s2[l++] = '$';
    s2[l++] = '#';
    for (int i = 0; i < len; i++) {
        s2[l++] = s[i];
        s2[l++] = '#';
    }
    s2[l] = 0;
    for (int i = 0; i < l; i++) {
        m[i] = i > mx ? min(m[2 * id - i], mx - i) : 1;
        while (s2[i - m[i]] == s2[i + m[i]]) m[i]++;
        if (i + m[i] > mx) {
            mx = i + m[i];
            id = i;
        }
    }
}
int main() {
    //ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    while (s[len] = getchar(), islower(s[len])) len++;
    Manacher();
    int ans = 0;
    for (int i = 0; i < len * 2 + 2; i++) {
        ans = max(ans, m[i] - 1);
    }
    cout << ans;
    return 0;
}

照着马拉车写的,不是说O(n)的吗?还有TLE,求大佬指点

2024/3/7 22:42
加载中...