Submission #84071

#TimeUsernameProblemLanguageResultExecution timeMemory
84071Bodo171Palindromes (APIO14_palindrome)C++14
100 / 100
54 ms40968 KiB
#include <iostream>
#include <fstream>
using namespace std;
const int nmax=300005;
struct fft
{
    int len,link,ap;
    int son[26];
}v[nmax];
string s;
int wh[nmax];
int nodes,p,ch,i;
long long ans;
void primul_chef()
{
    nodes=2;
    v[1].len=-1;
    v[1].link=v[2].link=1;
    wh[0]=2;
}
void ins(int poz)
{
    p=wh[poz-1];ch=s[poz]-'a';
    while(s[poz]!=s[poz-v[p].len-1])
        p=v[p].link;
    if(v[p].son[ch])
    {
        v[v[p].son[ch]].ap++;
        wh[poz]=v[p].son[ch];
        return;
    }
    ++nodes;
    wh[poz]=nodes;
    v[p].son[ch]=nodes;
    v[nodes].len=v[p].len+2;
    v[nodes].ap=1;
    if(v[nodes].len==1)
    {
        v[nodes].link=2;
        return;
    }
    p=v[p].link;
    while(s[poz]!=s[poz-v[p].len-1])
        p=v[p].link;
    v[nodes].link=v[p].son[ch];
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin>>s;s=" "+s;
    primul_chef();
    for(i=1;i<s.size();i++)
        ins(i);
    for(i=nodes;i>=1;i--)
    {
        v[v[i].link].ap+=v[i].ap;
        ans=max(ans,1LL*v[i].len*v[i].ap);
    }
    cout<<ans;
    return 0;
}

Compilation message (stderr)

palindrome.cpp: In function 'int main()':
palindrome.cpp:52:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(i=1;i<s.size();i++)
             ~^~~~~~~~~
#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...