Submission #109982

#TimeUsernameProblemLanguageResultExecution timeMemory
109982PeppaPigPalindromes (APIO14_palindrome)C++14
100 / 100
56 ms34936 KiB
#include <bits/stdc++.h>

#define long long long

using namespace std;

const int N = 3e5+5;

int n;
int t[N][26], len[N], link[N], occ[N], idx, suff;
char S[N];

void add(int pos) {
    int cur = suff, x = S[pos] - 'a';
    while(pos - 1 - len[cur] < 0 || S[pos - 1 - len[cur]] != S[pos])
        cur = link[cur];
    if(t[cur][x]) {
        suff = t[cur][x];
        ++occ[t[cur][x]];
        return;
    }
    suff = ++idx;
    len[idx] = len[cur] + 2, t[cur][x] = idx, occ[idx] = 1;
    if(len[idx] == 1) { link[idx] = 2; return; }
    cur = link[cur];
    while(pos - 1 - len[cur] < 0 || S[pos - 1 - len[cur]] != S[pos])
        cur = link[cur];
    link[idx] = t[cur][x];
}

void init_tree() {
    idx = suff = 2;
    len[1] = -1, len[2] = 0;
    link[1] = 1, link[2] = 1;
}

int main() {
    scanf("%s", S+1); n = strlen(S+1);
    init_tree();
    for(int i = 1; i <= n; i++) add(i);
    long ans = 0;
    for(int i = idx; i > 2; i--) {
        occ[link[i]] += occ[i];
        ans = max(ans, 1ll * len[i] * occ[i]);
    }
    printf("%lld\n", ans);

    return 0;
}

Compilation message (stderr)

palindrome.cpp: In function 'int main()':
palindrome.cpp:38:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%s", S+1); n = strlen(S+1);
     ~~~~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...